【发布时间】:2021-06-29 06:05:03
【问题描述】:
我们有一个集合,比如说,叫做“restaurants”。对于每个餐厅,都有一个名为“visited”的子集合,我们在其中捕获访问过该餐厅的每个用户的 userId。数据库如下所示:
我们选择创建子集合而不是在餐厅内部使用数组,因为我们希望这个数字会增加到非常大的文档大小。此外,我们不确定涉及非常长的数组(其中 1000 个数组中的 100 个)的查询的性能。
无论如何,既然我们有了这些名为“visited”的子集合,我们就可以使用带有索引的集合组查询来执行类似“查找用户访问过的所有餐馆:”abcdxyz“和”==查询,并按照一定的顺序,可以说,按visitedOn 日期/时间排序。
这是我们尝试在 python 中运行的内容:
db.collection_group(u'visited').where(u'userId', u'!=', u'idoftheuser').order_by('visitedOn', direction=firestore.Query.DESCENDING)
当我们运行此程序来查找该用户从未访问过的餐厅时,Firestore 抛出以下错误:
ValueError: 运算符字符串 '!=' 无效。有效的选择是:、>=、array_contains
这是真的吗?为什么他们不允许在单个集合中使用“!=”查询?我们怎样才能绕过这个问题?我们真的不想再对我们的数据库模型进行任何更改。来来回回已经太多了。
有什么建议吗?
【问题讨论】:
-
请编辑您的问题并添加它的屏幕截图,而不是描述您的数据库的外观。除此之外,还请添加您正在使用的整个“!=”查询。
-
编辑了问题,Alex。
-
Alex,这里有什么建议吗?
标签: python android firebase google-cloud-firestore denormalization