我正在创建一个应用,其中显示公告,并将其存储在firestore中,并且每个公告都有一个hasRead对象。 它的工作原理与用户阅读公告时一样,在用户应用中显示为已读。但是,当另一个用户正在阅读相同的公告时,他/她的优胜劣汰将被存储,并覆盖其他已存储的优胜劣汰。
这是他的存储方式。
setAnnounceToRead(userId) {
firebase.firestore().collection('announcements').doc(this.state.id).set({
hasread: {
userId
}
},
{ merge: true });
}
我已经发现这是因为合并,因为它不会“添加” usrid,而是将其覆盖。
如何添加读取公告的每个用户ID,但保留现有的用户ID?
欢呼
答案 0 :(得分:1)
现在,您将每个用户的UID存储为名为userId
的字段。由于每个用户使用相同的字段名称,因此最终只存储了最后一个用户的UID。
要存储所有用户的UID,通常需要使用以下结构:
hasread: {
udartsUid: true,
pufsUid: true
}
在您的代码中,该代码会翻译为:
let update = {};
update[userId] = true;
firebase.firestore().collection('announcements').doc(this.state.id).set({
hasread: update
},
{ merge: true });
但是,由于Firestore现在具有允许您将数组用于此类信息的操作,因此这种操作最近变得容易得多。
let doc = firebase.firestore().collection('announcements').doc(this.state.id);
doc.update({ "hasRead": FieldValue.arrayUnion(userId) });
此代码段会将userId
值添加到数组中(如果尚未存在)。如果该值已经在数组中,则不执行任何操作。
有关后者的更多信息,请参见博客文章Better arrays in Cloud Firestore。