我正在开始使用Cloud Firestore,但卡在这里了。
我正在寻找一个where查询,以返回值>=
限制的值。
[{
'limit': 100,
'value': 200
},
{
'limit': 50,
'value: 50,
},
{
'limit': 95,
'value': 90,
}]
我在云函数中使用 Firebase Admin Python SDK。有什么提示吗?
我正在开始使用Cloud Firestore,但卡在这里了。
我正在寻找一个where查询,以返回值>=
限制的值。
[{
'limit': 100,
'value': 200
},
{
'limit': 50,
'value: 50,
},
{
'limit': 95,
'value': 90,
}]
如Alex所解释的那样,在执行Firestore查询时,没有比较两个文档字段值的方法。
一个可能的方法是,在保存文档时将不等式的结果保存到数据库中。如果您在保存“检查”文档时知道了这两个值(limit
和value
),则可以添加第三个字段,例如valueAboveLimit
,其值为True
或False
,您可以在保存“检查”文档时进行计算(即使用相应的客户端SDK或Firebase Admin Python SDK从前端或服务器进行Firestore文档写作)。
然后,您的查询将变得简单:
database = firestore.client()
col_checks = database.collection('checks')
query_checks = col_checks.where('valueAboveLimit', '==', True)
results = query_checks.get()
如果您保存Firestore文档时没有limit
和value
的值(例如稍后编写limit
字段),则可以使用云函数触发器在Firestore文档更改时触发,并且如果这两个字段存在,则计算并保存valueAboveLimit
字段。
limit
属性的值大于或等于value
属性的值的文档。因此,根据您的示例,期望的结果应该是第一个和第二个文档。checks
集合中的所有文档,并在客户端过滤结果。如果您的集合中有大量文档,这可能不是最佳解决方案,因为它需要读取所有文档。这意味着您会因读取每个文档而被收取一次读取操作费用。limit
属性的固定值,并使用where()
调用查询数据库:col_checks.where('limit', '>=', your_limit)
limit
属性值>=
value
属性值的文档。在您的示例中,结果应该是单个文档,即最后一个文档,因为95 >= 90
,对吗? - Alex Mamo