如何在 Firestore 中正确使用 arrayUnion?
Posted
技术标签:
【中文标题】如何在 Firestore 中正确使用 arrayUnion?【英文标题】:How to use arrayUnion in Firestore correctly? 【发布时间】:2020-11-26 22:22:17 【问题描述】:我正在尝试使用 Node.js Firebase Admin SDK 将新的 javascript 对象添加到 Firestore 集合中的数组字段。
我确定我所针对的文档包含有问题的字段,但我不断收到错误:TypeError:
Cannot read property 'arrayUnion' of undefined
我知道这个question,但修复没有帮助。
任何帮助将不胜感激。
相关路线:
router.post("/create-new-user-group", async (req, res) =>
try
const userId, usersName, groupName = req.body;
if (!userId || !usersName || !groupName) return res.status(422).send();
const groupRef = await db.collection("groups").doc();
const group = await groupRef.set(
id: groupRef.id,
name: groupName,
userId,
members: [ id: userId, name: usersName, isAdmin: true ],
);
const response = await db
.collection("users")
.doc(userId)
.update(
groups: fbApp.firestore.FieldValue.arrayUnion(
id: userId,
name: userName,
),
);
res.send(group);
catch (error)
console.log("error creating new group:", error);
res.status(400).send(error);
);
firebaseInit.js:
const admin = require("firebase-admin");
const serviceAccount = require("../serviceAccount.json");
const firebaseApp = admin.initializeApp(
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://xxx-xxxxx.firebaseio.com",
);
exports.fbApp = firebaseApp;
【问题讨论】:
【参考方案1】:错误告诉您fbApp.firestore.FieldValue
未定义。因此,它没有任何属性或方法可供您调用。
如果您想使用FieldValue
,则必须通过firebase-admin
命名空间导入来引用它,而不是通过初始化的应用实例。
const admin = require("firebase-admin");
const FieldValue = admin.firestore.FieldValue;
// now you can write FieldValue.arrayUnion(...)
【讨论】:
以上是关于如何在 Firestore 中正确使用 arrayUnion?的主要内容,如果未能解决你的问题,请参考以下文章
无法在firebase.firestore.CollectionReference中使用Array firebase.firestore.Query为什么?