31

我正在尝试运行一个简单的查询,在其中搜索包含对象数组中的值的文档。

例如,看看我的数据库结构:

火库数据库

我想运行类似这样的查询:

db.collection('identites').where("partyMembers", "array-contains", {name: "John Travolta"})

实现这一目标的正确方法是什么,Firestore甚至可以吗?

谢谢。

4

2 回答 2

33

正如弗兰克在他的回答中解释的那样,使用数组包含来查询存储在数组中的对象的特定属性是不可能的。

但是,有一种可能的解决方法:在您的情况下,实际上可以查询整个 object,如下所示:

db.collection('identites').where("partyMembers", "array-contains", {id: "7LNK....", name: "John Travolta"})

也许这种方法会满足您的需求(或者可能不会....)。

于 2019-01-07T22:25:16.353 回答
23

这些array-contains操作检查数组是否包含特定(完整)值。它无法检查对象数组是否包含具有特定属性值的项目。

进行查询的唯一方法是在文档中添加一个附加字段,其中仅包含您要查询存在的值。例如:partyMemberNames: ["John Travolta", "Olivia Newton"].

于 2019-01-07T21:04:54.123 回答