在Firestore中,我有一个文档,其中包含一个名为myMap
的映射,其中包含一个名为myArr
的数组字段。
是否可以在交易中使用arrayUnion
通过向其添加元素来更新myArr
?
await admin.firestore().runTransaction(async (transaction: Transaction) => {
//
const docRef: DocumentReference = admin.firestore()
.doc(`collection/document`);
const doc: DocumentSnapshot = await transaction.get(docRef);
if (doc.exists)
await transaction.update(docRef,
{'myMap': {'myArr': FieldValue.arrayUnion('myNewValue')},}
);
});
我相信上面的代码应该添加myArr
,但是它代替了整个数组。
我在做什么错了?
答案 0 :(得分:2)
FieldValue.arrayUnion()
和FieldValue.arrayRemove()
仅在更新对象顶层标识的字段本身是列表时才起作用。您现在通过为对象提供列表来做的事情确实是在替换整个列表。它不会识别该列表的现有内容。
您可以做的是调出嵌入列表的特定名称:
await transaction.update(docRef,
{'myMap.myArr': FieldValue.arrayUnion('myNewValue')},}
);
请注意点号用于明确调用列表。