【问题标题】:Updating an array in Firestore using arrayUnion使用 arrayUnion 更新 Firestore 中的数组
【发布时间】:2020-10-29 20:22:20
【问题描述】:

我正在尝试向 Firestore 中的集合内的数组添加一个值。 我已按照文档进行操作,但总是收到一条错误消息:

UnhandledPromiseRejectionWarning: FirebaseError: Function 使用无效数据调用 DocumentReference.update()。
不支持 字段值:自定义对象(在文档的字段播放器中找到 季节/CNClnl0NhvVxmk32sKe2)

注意数组是空的。但它确实包含最初具有相同结果的数据。

我尝试手动插入 seasonId,但没有成功。

这是我的代码:

const seasonRef = db.collection("seasons").doc(seasonId);
  await seasonRef
    .update({
      players: admin.firestore.FieldValue.arrayUnion(userId),
    })
    .catch((err) => {
      console.log(err.message);
    });

db.js:

const firebase = require("firebase");
const config = require("./config");

firebase.initializeApp(config);

const db = firebase.firestore();

module.exports = db;

我试过让 admin 都声明为:

const admin = require("firebase-admin");

和:

const admin = require("../data/firebase");

哪些参考:

const admin = require("firebase-admin");
const config = require("./config");

admin.initializeApp(config);

module.exports = admin;

后者用于验证前端生成的令牌。

【问题讨论】:

  • 请编辑问题以显示重现错误的complete minimal code。您显示的内容不完整,因为我们看不到您如何创建 db。我们应该能够获取您在此处显示的所有内容、复制它并查​​看相同的行为。
  • @DougStevenson,我添加了 db.js 内容
  • 您的代码中的userId 是什么(因为这很可能是导致问题的值)?
  • @FrankvanPuffelen 一个由 Firestore 生成的简单字符串,在本例中为:DD2elAn4XaWzeOquw2DtOucS5mk2

标签: javascript node.js firebase express google-cloud-firestore


【解决方案1】:

您正在混合使用 Firestore 客户端和管理 SDK。那是行不通的。

您正在像这样导入 Web 客户端 SDK:

const firebase = require("firebase");

您正在像这样导入 Admin SDK:

const admin = require("firebase-admin");

它们是具有不同 API 的不同 SDK。您不能使用 Admin SDK 中的 FieldValue.arrayUnion() 作为调用客户端 SDK 的代码的输入。虽然 API 看起来很相似,但它们并不相同。您应该使用其中之一,而不是两者都使用。如果您在 nodejs 后端上运行,您可能应该只使用 Admin SDK。

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 2019-06-08
    • 2019-04-14
    • 2019-02-19
    • 2020-11-26
    • 2020-06-25
    • 1970-01-01
    • 2021-04-12
    • 2023-03-24
    相关资源
    最近更新 更多