我尝试使用Firebase云功能将聊天室的ID添加到数组字段中的用户文档中。我似乎无法弄清楚写入数组字段类型的方法。这是我的云功能
exports.updateMessages = functions.firestore.document('messages/{messageId}/conversation/{msgkey}').onCreate( (event) => {
console.log('function started');
const messagePayload = event.data.data();
const userA = messagePayload.userA;
const userB = messagePayload.userB;
return admin.firestore().doc(`users/${userA}/chats`).add({ event.params.messageId }).then( () => {
});
});
这是我的数据库看起来的方式
任何提示非常感谢,我是firestore的新手。
答案 0 :(得分:10)
他们从文档中添加了一个新操作,以添加或删除数组中的元素。在此处阅读更多信息:https://firebase.google.com/docs/firestore/manage-data/add-data
示例:
var admin = require('firebase-admin');
// ...
var washingtonRef = db.collection('cities').doc('DC');
// Atomically add a new region to the "regions" array field.
var arrUnion = washingtonRef.update({
regions: admin.firestore.FieldValue.arrayUnion('greater_virginia')
});
// Atomically remove a region from the "regions" array field.
var arrRm = washingtonRef.update({
regions: admin.firestore.FieldValue.arrayRemove('east_coast')
});
答案 1 :(得分:5)
Firestore目前不允许您更新阵列的各个字段。但是,您可以替换数组的全部内容:
admin.firestore().doc(`users/${userA}/chats`).update('array', [...]);
请注意,这可能会覆盖来自其他客户端的某些写入。在执行更新之前,您可以使用事务来锁定文档。
admin.firestore().runTransaction(transaction => {
return transaction.get(docRef).then(snapshot => {
const largerArray = snapshot.get('array');
largerArray.push('newfield');
transaction.update(docRef, 'array', largerArray);
});
});
答案 2 :(得分:1)
这是 2021 年,经过 firebase firestore 的多次更新,在不删除其他数据的情况下在数组中添加数据的新方法是
var washingtonRef = db.collection("cities").doc("DC");
// Atomically add a new region to the "regions" array field.
washingtonRef.update({
regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});
// Atomically remove a region from the "regions" array field.
washingtonRef.update({
regions: firebase.firestore.FieldValue.arrayRemove("east_coast")
});