Firestore 按数组的字段值进行查询

IT技术 reactjs firebase google-cloud-firestore react-redux-firebase
2021-03-26 00:03:30

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

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

消防数据库

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

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

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

谢谢。

2个回答

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

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

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

也许这种方法适合您的需求(或者可能不适合......)。

@VictorDias 酷!很高兴听到我可以帮助你。如果您认为我的回答对您有帮助,您可以点赞!谢谢
2021-05-23 00:03:30
我试图查询整个对象(上面的确切示例)但没有成功。你确定有可能吗?找不到有关文档的信息。弗兰克你能确认一下是否可能,如果是真的请提供一个语法示例
2021-05-28 00:03:30
嗨@RenaduTamec,终于成功了,请求字段的名称拼写错误。感谢您的支持,您的回应说服我坚持并找到解决方案。
2021-06-05 00:03:30
@VictorDias 我确认它有效。您必须有一个对象数组(Firestoremap类型)并使用准确和完整的对象进行查询如果您对这种方法有疑问,请使用您的确切代码和数据库结构创建一个新的 SO 问题,并在下面添加带有链接的评论。我很乐意看一看。
2021-06-10 00:03:30
@RenaudTame​​c,非常感谢您的帮助,您可以通过选择项目列表返回空的标签来观察crud-angularfirestore-ionic4.web.app上的行为项目的源代码可以自由地在github访问,负责查询整个对象(标签在这种情况下)的线以下github.com/meumobi/mmb-demos.crud-angularfirestore-ionic4/blob/...我想和你分享一个堆栈闪电战,但由于可能是一个问题,我无法实现它github.com/angular/angularfire/issues/...
2021-06-12 00:03:30

所述array-contains如果阵列操作检查,含有特定的(完整的)值。它无法检查对象数组是否包含具有特定属性值的项目。

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

既然你说没有办法运行我提到的查询,我就接受它作为答案,谢谢。
2021-05-25 00:03:30
这里什么都没有改变。如果有,文档会明确指出这一点。不过,该解决方法仍然有效。
2021-06-17 00:03:30