我需要获取一个包含特定子文档ID的文档,以便在不查询整个集合的情况下计算最大和最小数据。
文档结构与此类似。
Collection: Student
/* unrelated field */
The document
Subcollection: Grade
Document: Math
Subcollection: Score
Document: Johny
查询将获得子文档ID为Johny的所有数据,因此我可以计算Johny评分的最小和最大分数以对分数进行归一化。
如果有替代的数据结构选择可以完成此任务,请随时推荐作为答案。我仍然可以迁移所有数据,因为大多数文档都没有子集合。
答案 0 :(得分:0)
在当前结构上,您可以像这样查询它:
putSerializable("key",object);
但是,这是非常低效的,因为您可以看到每个年级执行2次读取+ 1次读取,因此,如果您愿意更改数据结构,则像这样简单得多:
var JohnyScore = []
db.collection("Student").get().then(function(doc) {
doc.collection("Grade").get().then(function(snapshot) {
snapshot.forEach(function(doc2) {
doc2.collection("Score").where("id", "==", "Johny").get().then(function(snapshot2) {
JohnyScore.push(snapshot2.data());
});
});
});
});
然后您可以使用以下命令进行查询:
Collection: Student
Document
id: Johny
Subcollection: Grade
Document
id: Math
score: 10
Document
id: History
score: 8
这意味着您仅执行2次读取。
希望这会有所帮助。