【问题标题】:Firestore to query by an array's field valueFirestore 通过数组的字段值进行查询
【发布时间】:2019-02-06 01:32:38
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: reactjs firebase google-cloud-firestore react-redux-firebase


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我尝试查询整个对象(上面的确切示例)但没有成功。你确定有可能吗?找不到关于文档的信息。弗兰克你能确认它是否可能,如果是的话,请提供一个语法示例
    • @VictorDias 我确认它有效。您必须有一个对象数组(Firestore map 类型)并使用确切的 和整个 对象进行查询。如果您对这种方法有疑问,请使用您的确切代码和数据库结构创建一个新的 SO 问题,并在下面添加带有链接的评论。我很乐意看看。
    • 嗨@RenaduTamec,终于成功了,请求字段的名称拼写错误。感谢您的支持,您的回复说服了我坚持并找到解决方案。
    • @VictorDias 酷!很高兴听到我可以帮助你。如果您认为我的回答对您有帮助,可以点赞!谢谢
    • 太棒了。在我的用例上效果很好。
    【解决方案2】:

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

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

    【讨论】:

    • 既然你说没有办法运行我提到的查询,我就接受它作为答案,谢谢。
    • 这里没有任何变化。如果有,文档将明确指出这一点。不过,解决方法仍然有效。
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多