使用Cloud Firestore过滤数据的更好方法

时间:2017-12-11 14:16:40

标签: javascript firebase vue.js google-cloud-firestore vuex

我正在尝试构建一个网络聊天应用程序。我使用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的文档,但似乎并不是基于所述文档中嵌套集合中的值本地过滤文档的方法。感谢。

0 个答案:

没有答案