Setting DocumentReference in a document on Firestore (NodeJS)

I am trying to create a document with a link to Firestore with NodeJS v8.6.0. Like this

const admin = require('firebase-admin') admin.initializeApp({ credential: MY_CREDENTIAL, databaseURL: MY_DB_URL }) const db = admin.firestore() const ref = db.doc('foo/someDoc') db.doc('bar/targetDoc').set({ link: ref }) 

Although ref is a DocumentReference , it gives a result

Error: The "data" argument is not a valid document. The input feature is deeper than 20 levels or contains a loop.

Is there any way to do this in the NodeJS SDK (Admin)?


In addition, the package used in the code,

 "firebase-admin": "^5.4.1" 

and

 console.log(ref) 

exits

 DocumentReference { _firestore: Firestore { makeAuthenticatedRequest: { [Function: makeAuthenticatedRequest] getCredentials: [Function: bound getCredentials], authClient: [Object] }, authClient: Auth { authClientPromise: null, authClient: null, config: [Object], environment: {} }, baseUrl: undefined, getCredentials: [Function: bound getCredentials], globalInterceptors: [], interceptors: [], packageJson: { name: '@google-cloud/firestore', version: '0.8.1', author: 'Google Inc.', description: 'Firestore Client Library for Node.js', contributors: [Array], main: './src/index.js', files: [Array], repository: 'googleapis/nodejs-firestore', keywords: [Array], dependencies: [Object], devDependencies: [Object], scripts: [Object], license: 'Apache-2.0', engines: [Object], types: './types/firestore.d.ts' }, projectId: 'MY_PROJECT', projectIdRequired: true, Promise: [Function: Promise], grpcMetadata: Metadata { _internal_repr: [Object] }, maxRetries: undefined, userAgent: 'gcloud-node-firestore/0.8.1', activeServiceMap_: Map {}, protos: {}, _preferTransactions: false, _lastSuccessfulRequest: null, api: { Firestore: [Object] }, _referencePath: ResourcePath { segments: [], _formattedName: undefined, _projectId: 'dewpod-dev', _databaseId: '(default)' }, app: FirebaseApp { firebaseInternals_: [Object], services_: [Object], isDeleted_: false, name_: '[DEFAULT]', options_: [Object], database: [Function: bound ], auth: [Function: bound ], messaging: [Function: bound ], storage: [Function: bound ], firestore: [Function: bound ], INTERNAL: [Object] }, INTERNAL: FirestoreInternals {} }, _referencePath: ResourcePath { segments: [ 'orgs', 'fooOrg' ], _formattedName: undefined, _projectId: 'dewpod-dev', _databaseId: '(default)' } } 

and full error message

 /SOME_PATH/node_modules/@google-cloud/firestore/src/validate.js:86 throw new Error(message); ^ Error: Argument "data" is not a valid Document. Input object is deeper than 20 levels or contains a cycle. at Object.exports.(anonymous function) [as isDocument] (/SOME_PATH/node_modules/@google-cloud/firestore/src/validate.js:86:15) at WriteBatch.set (/SOME_PATH/node_modules/@google-cloud/firestore/src/write-batch.js:251:14) at DocumentReference.set (/SOME_PATH/node_modules/@google-cloud/firestore/src/reference.js:416:8) at Object.<anonymous> (/SOME_PATH/fstest.js:17:20) at Module._compile (module.js:624:30) at Object.Module._extensions..js (module.js:635:10) at Module.load (module.js:545:32) at tryModuleLoad (module.js:508:12) at Function.Module._load (module.js:500:3) at Function.Module.runMain (module.js:665:10) 
+5
source share
1 answer

This was a mistake in the interaction between the admin SDK and the regular node SDK for Firestore.

An update for @ google-cloud / firestore 0.8.2 should fix this problem.

You can update your project with npm update to get this change.

+6
source

Source: https://habr.com/ru/post/1272336/


All Articles