【发布时间】:2020-01-20 08:22:53
【问题描述】:
我想要做的是以这样的方式查询一个集合:
1.我可以得到true值在所有文档中出现的次数
例如,有没有办法检查每个文档并查询匹配 true 的文档字段?
- 之后,将
true值出现在变量中的次数存储起来。
【问题讨论】:
标签: javascript firebase google-cloud-firestore
我想要做的是以这样的方式查询一个集合:
1.我可以得到true值在所有文档中出现的次数
例如,有没有办法检查每个文档并查询匹配 true 的文档字段?
true 值出现在变量中的次数存储起来。【问题讨论】:
标签: javascript firebase google-cloud-firestore
有不同的可能方法:
TransmitterError == true的所有文档
您可以编写一个返回所有文档的查询并使用QuerySnapshot 的size 属性:
db.collection("Londiani Hill").where("TransmitterError", "==", true)
.get()
.then(function(querySnapshot) {
console.log(querySnapshot.size);
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
这种方法的问题在于,您要阅读所有文档,其中包含TransmitterError = true 字段每次您想计算它们时,这是有代价的。 p>
您可以在每次创建具有字段TransmitterError = true 的文档时增加一个计数器(如果您删除文档或将TransmitterError 的值更改为false,则减少它)。您需要为每个集合维护一个计数器。
要实现计数器,您可以为每个集合使用一个Distributed counter,或者在每个集合中使用一个“计数器”文档,其中您有一个计数器字段,您可以使用firebase.firestore.FieldValue.increment() 递增,请参阅doc。
两种类型的计数器之间的选择标准是特定集合的计数器将被更新的次数:事实上,在 Cloud Firestore 中,您只能更新单个文档大约一次每秒。因此,如果您知道计数器的文档可能每秒更新一次以上,则应选择分布式计数器方法,否则,您可以依赖每个集合一个计数器文档。
【讨论】:
true
这可能会帮助您解决问题
db.collection("Londiani Hill").where("TransmitterError", "==", true).get().then(function(querySnapshot) {
console.log(querySnapshot.size);
});
【讨论】: