跑步!=关于Firestore集合组的查询

2024-03-29 01:48:09 发布

您现在位置:Python中文网/ 问答频道 /正文

比如说,我们有一个叫做“餐馆”的收藏。对于每个餐厅,都有一个称为“已访问”的子集合,我们在其中捕获访问过该餐厅的每个用户的用户ID。以下是数据库的外观:

enter image description here

我们选择在餐馆内部使用数组而不是创建子集合,因为我们预计这个数字会增加到非常大的文档大小。此外,我们不确定涉及非常长的数组(1000个数组中的100个)的查询的性能

总之,现在我们有了这些称为“已访问”的子集合,我们可以使用集合组查询和索引来执行类似“查找用户访问的所有餐厅:”abcdxyz和“==”查询,并按照一定的顺序,比如说,按访问日期/时间排序

下面是我们在python中尝试运行的内容:

db.collection_group(u'visited').where(u'userId', u'!=', u'idoftheuser').order_by('visitedOn', direction=firestore.Query.DESCENDING)

当我们运行此命令查找此用户从未访问过的餐厅时,Firestore抛出以下错误:

ValueError: Operator string '!=' is invalid. Valid choices are: <, <=, ==, >, >=, array_contains

这是真的吗?他们为什么不允许“=“在单个集合中何时允许查询?我们如何才能避开这个问题?我们真的不想再对数据库模型进行任何更改了。已经来回太多了。”

有什么建议吗


Tags: 用户文档id数据库内容排序顺序时间
1条回答
网友
1楼 · 发布于 2024-03-29 01:48:09

当谈到不相等(!=)查询时,有一些limitations

In a compound query, range (<, <=, >, >=) and not equals (!=, not-in) comparisons must all filter on the same field.

这就是为什么会出现以下查询的原因:

db.collection_group(u'visited').where(u'userId', u'!=', u'idoftheuser').order_by('visitedOn', direction=firestore.Query.DESCENDING)

不起作用。除此之外,还请注意,包含where()order_by()调用的查询需要创建index

相关问题 更多 >