比如说,我们有一个叫做“餐馆”的收藏。对于每个餐厅,都有一个称为“已访问”的子集合,我们在其中捕获访问过该餐厅的每个用户的用户ID。以下是数据库的外观:
我们选择在餐馆内部使用数组而不是创建子集合,因为我们预计这个数字会增加到非常大的文档大小。此外,我们不确定涉及非常长的数组(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
这是真的吗?他们为什么不允许“=“在单个集合中何时允许查询?我们如何才能避开这个问题?我们真的不想再对数据库模型进行任何更改了。已经来回太多了。”
有什么建议吗
当谈到不相等(!=)查询时,有一些limitations:
这就是为什么会出现以下查询的原因:
不起作用。除此之外,还请注意,包含
where()
和order_by()
调用的查询需要创建index相关问题 更多 >
编程相关推荐