【发布时间】:2019-03-31 12:55:19
【问题描述】:
我正在尝试找出是否有合理的方法:
我的问题:
很快就超过了我在 Firestore 中读取的每日配额。
我的数据库和我的工作:
我的数据库看起来像这样(简化):
sessions: { // collection
sessionId: { // document
users: { // collection
userId: { // document
id: string
items: { // collection
itemId: trackObject
}
}
}
}
}
现在我想从一个会话中检索所有用户及其项目。大多数会话有 2-3 个用户,但有些用户有大约 3000 个项目。我基本上想检索这样的数组:
[
{
userId,
items: [
...items
],
},
...users
]
我目前是怎么做的:
所以我得到了所有用户:
const usersRef = db.collection(`sessions/${sessionId}/users`);
const userSnapshots = await usersRef.get();
const userDocs = userSnapshots.docs;
然后,我为每个用户检索他们的项目:
(我使用了一个可以讨论但无论如何都可以讨论的 for 循环)
const user = userDocs[i].data();
const itemsRef = usersRef.collection(`${user.id}/items`);
const itemSnapshots = await itemRef.get();
const items = itemSnapshots.docs
最后我通过地图检索实际项目:
user.items = items.map(doc => doc.data());
return user;
我的理论:
因此,如果我在用户拥有 3000 个项目的会话上执行此操作,代码将在 firestore 上执行 3000 次读取操作。仅仅跑了 17 次后,我每天就吃光了 50000 次手术。
这个推理有点基于this answer。
我的问题:
还有其他方法吗?就像在一次读取调用中获取所有曲目?我是否应该查看是否可以将所有项目放入用户对象中的数组键中,而不是存储为集合? Firestore 的免费版本是否根本不适合一次性检索这么多文档?
【问题讨论】:
标签: firebase google-cloud-firestore