我正在尝试构建一个网络聊天应用程序。我使用Firebase作为后端和Vuex。我有一个登录用户,对话,消息和用户。对话文档 - 在Firebase的Cloud Firestore中 - 包含属于该对话的消息数组以及属于该对话的另一个用户列表。
当我的会话容器组件打开时,我通过操作检索对话并提交更改:
动作:
async get({commit, rootState}) {
let convoRef = rootState.db.collection('conversations');
let conversations = await convoRef.get();
conversations.forEach(conversation => commit('SET_CONVERSATION', {conversation}))
}
突变:
SET_CONVERSATION(state, {conversation}) {
let user = firebase.auth().currentUser;
const data = conversation.data();
let users = data.users;
_.forEach(users, function (value, key) {
if (value.id === user.uid) {
state.all = {
...state.all,
[conversation.id]: {
id: conversation.id,
users: data.users,
name: data.name,
created: data.created,
messages: []
}
};
state.allIds.push(conversation.id);
}
});
}
我使用
过滤掉了适当的对话 if (value.id === user.uid)
其中user.uid是登录用户的ID。
这种方法的问题在于,我得到的所有会话都不属于登录用户,然后进行过滤。有没有办法在发出突变之前过滤掉数据?我尝试浏览Firestore的文档,但似乎并不是基于所述文档中嵌套集合中的值本地过滤文档的方法。感谢。