Firestore 按数组的字段值查询

Firestore to query by an array's field value

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

比如看我的数据库结构:

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

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

实现此目标的正确方法是什么,使用 Firestore 是否可行?

谢谢。

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

特定值的项目

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

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

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

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

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

如果您想从文档的“partyMembers”数组中提取姓名:“John Travolta”。您可以通过一些类似的方法来实现这一点,您可以循环遍历文档中的所有数组以找到该名称。

const [names, setNames] = React.useState([])

const readAllNames = async() => {
const snapshot = await firebase.firestore().collection('identites').doc(documentID).get()
      const filterData = snapshot.data().question.map(val => val.name === "John Travolta" ? val : null)
      setNames( filterData.filter(e=>e) );
}
这种技术在特定的文档中使用,因为我们给出了 .doc(documentID) 这样你就可以获得名称常量中名称为“John Travolta”的所有数组。