当前位置: 首页 > 知识库问答 >
问题:

在FiRecovery(NodeJS)上的文档中设置文档引用

艾飞宇
2023-03-14

我正在尝试使用NodeJS v8在Firestore上创建一个引用文档。6.0。像这样

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 })

虽然ref是一个文档参考,但它会导致

错误:参数“data”不是有效文档。输入对象深度超过20层或包含一个循环。

有无论如何要做的NodeJS(管理)SDK?

此外,代码中使用的包是

"firebase-admin": "^5.4.1"

console.log(ref)

输出

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)' } }

完整的错误消息是

/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)

共有2个答案

暴向笛
2023-03-14

在实现后台函数来处理文档更新事件时,我遇到了类似的错误。正如文档所建议的,通过检查您是否无意中重新触发了相同的功能,避免无限循环非常重要:

每当您写入触发函数的同一文档时,您都有创建无限循环的风险。请谨慎行事,并确保在不需要更改时安全退出函数

从这里开始:

注意:小心避免任何情况,即函数的结果实际检索函数,从而创建无限循环——例如,由写入特定Cloud FiRecovery文档触发的函数,该文档通过写入相同的路径终止。还要确保以幂等方式编写函数,以便如果它们为单个事件运行多次,它们会产生相同的结果。

戚弘和
2023-03-14

这是Firestore的管理SDK和常规节点SDK之间的交互中的一个bug。

更新@google cloud/firestore 0.8.2应该可以解决此问题。

您可以使用npm update更新您的项目以获得此更改。

 类似资料:
  • 我正在尝试制作一个flutter应用程序,收集一些学生数据并将其存储到firestore。我想在名为users的集合中添加有关用户的文档,并在具有自定义id(如uid)的文档中添加有关用户的文档。 我面临的问题是,我无法在这样一个既不存在特定文档也不存在集合的文档上设置数据。现在,这实际上不是问题的原因,因为它在使用云firestore的JavaScript库时起作用。 我的依赖: 迄今为止的代码

  • 我已经做了很多关于这个主题的研究,但我发现的一切都是每次“使用的函数getOverContent的压模”。我做了这个,但还是不行。 我做了一个程序,合并在一起的PDF的汇编,然后它分页这个新的文件(我希望你可以跟随我写的)。原始PDF是自制的(直接保存在PDF中)或不是(扫描)。这是最后几个有麻烦的地方。分页显示在第一个,但不是在秒(它可能存在,但它应该在图像后面)! 这里是分页的代码,有人知道我

  • 本文向大家介绍nodejs npm package.json中文文档,包括了nodejs npm package.json中文文档的使用技巧和注意事项,需要的朋友参考一下 简介 本文档有所有package.json中必要的配置。它必须是真正的json,而不是js对象。 本文档中描述的很多行为都受npm-config(7)的影响。 默认值 npm会根据包内容设置一些默认值。 name 在packag

  • 如何使用JavaScript获取Firebase Firestore子集合“userPosts”中的所有文档?你可以在下面的图片中看到我的数据库结构。 以下是我尝试过的: 这段代码应该做的是获取子集合“userPosts”中的文档。它应该进入集合“posts”中的每个文档,然后进入“userPosts”并获取该子集合中的每个文档。 第一次收集“帖子” 子集合“userPosts”

  • 我被android firstore文档和子集合弄糊涂了。 此示例将生成以下数据结构: 代码如下: 子集合和文档节点交替显示:a、c与b、d。 但是如何在没有d节点的情况下实现类似的数据结构(如下所示): 自。add方法仅适用于document而不适用于collection,我们不能只删除d(document),因为c(collection)没有add方法。 我应该如何修改我的代码?

  • 打印复合图稿 复合图是一种单页图稿,与您在插图窗口中看到效果的一致 — 换言之,就是直观的打印作业。复合图像还可用于校样整体页面设计、验证图像分辨率以及查找照排机上可能发生的问题(如 PostScript 错误)。 1选择 “文件 ”>“打印 ”。 2从 “打印机 ”菜单中选择一种打印机。若要打印到文件而不是打印机,请选择 “Adobe PostScript® 文件 ”或 “Adobe PDF”。