我正在Cloud Firestore上迈出第一步,而我仍然坚持这一步。
我正在寻找一个where查询,以返回>=
极限值。
[{
'limit': 100,
'value': 200
},
{
'limit': 50,
'value: 50,
},
{
'limit': 95,
'value': 90,
}]
我正在Cloud Function中使用Firebase Admin Python SDK。
有任何提示吗?
答案 0 :(得分:2)
正如Alex所解释的那样,使用Firestore执行查询时无法比较两个文档的字段值。
一种可能的方法是将文档保存到数据库时保存不等式的结果。如果在保存“检查”文档时知道两个值(limit
和value
),则可以添加第三个字段,例如valueAboveLimit
,其值为{ {1}}或True
是您在保存“检查”文档时所计算的(即从前端使用相应的客户端SDK或从服务器使用Firebase Admin Python SDK,具体取决于您的编写方式Firestore文件)。
那么您的查询将很容易:
False
如果在保存Firestore文档时没有database = firestore.client()
col_checks = database.collection('checks')
query_checks = col_checks.where('valueAboveLimit', '==', True)
results = query_checks.get()
和limit
的值(例如,稍后会写value
字段),可以使用when the Firestore document is changed触发的Cloud Function,如果存在两个字段,则计算并保存此limit
字段。
答案 1 :(得分:1)
根据前面的注释,您正在寻找一种查询数据库的方法,以便它只能返回limit
属性值为>=
而不是{{ {1}}属性。因此,根据您的示例,预期结果应该是第一个文档和第二个文档。
不幸的是,Firestore当前没有内置查询可以帮助您实现这一目标。我能想到的最简单的解决方案是获取value
集合中的所有文档,并在客户端过滤结果。如果您的馆藏中有大量文档,这可能不是最好的解决方案,因为它需要读取所有文档。这意味着您要为每个阅读的文档执行一次阅读操作。
另一种解决方案可能是对checks
属性使用固定值,并使用limit
调用查询数据库:
where()
每当您需要一个新的限制时,就必须创建一个新的查询。