I am trying to create a doc with a reference on 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 results
Error: Argument "data" is not a valid Document. Input object is deeper than 20 levels or contains a cycle.
Is there anyway to do it on NodeJS (Admin)SDK?
In addition, the package used in the code is
"firebase-admin": "^5.4.1"
and
console.log(ref)
outputs
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 the full error message is
/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)
Build a DocumentReference to the document you want to update, then use the update() method on the DocumentReference to indicate only the fields to be added or changed. Pass it an object with only properties that match the fields to add or change.
Citation includes author's name, year of publication, then page numbers if available. If your source lacks an author, cite the first one or two words of the title. If no date is given, place "n.d." after the author's name. note on page numbers: Web documents often don't have page numbers.
Firestore Update Entire Document getDatabase() → where we want to update a document. doc() → where we'll be passing references of database, collection and ID of a document that we want to update. setDoc() → where we actually pass new data that we want to replace along with the doc() method.
This was a bug in an interaction between the admin SDK and the regular node SDK for Firestore.
An update to @google-cloud/firestore 0.8.2 should fix this issue.
You can update your project with npm update
to get this change.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With