Firestore数据复制与将文档引用存储在字段中

时间:2019-10-24 16:03:38

标签: firebase google-cloud-firestore

我正在为Firestore构建数据模型,并试图决定是否存储文档参考与复制数据。从文档资源字段中检索文档看起来很简单,而且看来客户端将不得不使用文档引用执行更少的写操作,在这里我缺少什么吗?在什么情况下应该选择重复数据与存储文档参考...

2 个答案:

答案 0 :(得分:1)

最好的解决方案是同时做这两个事情。例如,您有两个集合-用户及其文章。将每个新文章保存在文章集合以及用户内部的集合中,并添加一个额外字段以引用文章。请参见以下示例:

export const addUserArticle = async (userId, state) => {
    const { title, article } = state;
    const createdAt = new Date();

    const articleRef = firestore.collection("articles").doc();

    try {
        await articleRef.set({
            title: title,
            body: body,
            createdAt: createdAt,
            createdBy: firebase.firestore().doc(`/users/${userId}`)
        });
    } catch (err) {
        console.error("Error saving article to articles in database:", err.message);
    }

    const userArticleRef = firestore.collection("users").doc(userId).collection(articles).doc(articleRef.id);
    try {
        await userArticleRef.set({
            title: title,
            body: body,
            createdAt: createdAt,
            articleRef: firebase.firestore().doc(`/articles/${articleRef.id}`)
        });
    } catch (err) {
        console.error("Error saving article to user in database:", err.message);
    }
}

答案 1 :(得分:0)

在不知道您的特定用例的情况下,不可能说出最好的方法。但是,一般而言,如果要减少获取次数和总体延迟,则应复制数据。如果要减少总存储量并增加延迟,请使用单独的文档。

要真正找出最好的方法,您应该使用有关数据的实际或预期数据进行基准测试和估算帐单费用。