node.js - 如何更新文档引用?

标签 node.js google-cloud-firestore firebase-admin

我尝试更新 DocumentReference 但无法执行此操作。

update() 方法失败。如何使用它? (如何传递参数?)

firebase-admin 版本为 6.3.0。
@google-cloud/firestore 版本为 0.19.0。

❯ firebase functions:shell
i  functions: Preparing to emulate functions.
Warning: You're using Node.js v8.14.0 but Google Cloud Functions only supports v6.11.5.
✔  functions: sampleFunc
firebase > const admin = require('firebase-admin');
firebase > admin.initializeApp();
firebase > let ref = admin.firestore().collection("users").doc('edqupYQhzqV1ODjEpoJn');
firebase > let updates = { email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3c4444447c45454512464646" rel="noreferrer noopener nofollow">[email protected]</a>' };
firebase > ref.update(updates).then(value => console.log(value) );
Error: Update() requires either a single JavaScript object or an alternating list of field/value pairs that can be followed by an optional precondition. Argument "dataOrField" is not a valid Document. Input is not a plain JavaScript object.
    at WriteBatch.update (/Users/xxx/Desktop/sample-functions/functions/node_modules/@google-cloud/firestore/build/src/write-batch.js:359:23)
    at DocumentReference.update (/Users/xxx/Desktop/sample-functions/functions/node_modules/@google-cloud/firestore/build/src/reference.js:387:14)

更新
文档已经创建,因此 get() 可以工作。

firebase > ref.get().then(snapshot => console.log(snapshot.data()));

set() 中也会出现错误。

firebase > ref.set({email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="caababab8aa8a8a8e4a9a9a9" rel="noreferrer noopener nofollow">[email protected]</a>'}, {merge: true}).then(value => console.log(value));
Error: Argument "data" is not a valid Document. Input is not a plain JavaScript object.
    at Validator.(anonymous function).values [as isDocument] (/Users/xxx/Desktop/sample-functions/functions/node_modules/@google-cloud/firestore/build/src/validate.js:99:27)
    at WriteBatch.set (/Users/xxx/Desktop/sample-functions/functions/node_modules/@google-cloud/firestore/build/src/write-batch.js:232:25)
    at DocumentReference.set (/Users/xxx/Desktop/sample-functions/functions/node_modules/@google-cloud/firestore/build/src/reference.js:349:27)

最佳答案

按照您发布的示例,您正在尝试更新不存在的文档。在这种情况下,您应该首先创建它。

如果您不确定文档是否存在,请传递将新数据与任何现有文档合并的选项,以避免覆盖整个文档。

来自 Google 的文档:

var cityRef = db.collection('cities').doc('BJ');

var setWithOptions = cityRef.set({
  capital: true
}, {merge: true});

引用:Firestore Add Data

关于node.js - 如何更新文档引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611303/

相关文章:

firebase - Stream <QuerySnapshot>返回空文档

node.js - 如何在Firebase云功能中使用adminSdk为firestore文档创建文档ID?

javascript - Firebase:如何从服务器上的用户名和密码生成访问 token ?

javascript - 持续集成、dist 文件夹和 node_modules

javascript - 无法导入以 UTF-8 BOM 编码的较少文件

node.js - bcrypt nodejs 无法按预期工作

firebase - 使用模拟器测试 Firestore 规则时如何设置测试数据?

node.js - 服务器端 DOM 操作技术(Java 与 Node)

Firebase 一次性函数

python - 将用户导入 Firebase 时密码错误(使用 SHA256 的 password_hash)