我试图运行一个简单的查询,在其中我搜索一个在对象数组中包含一个值的文档。
例如,看看我的数据库结构:

我想运行一个类似于以下内容的查询:
db.collection('identites').where("partyMembers", "array-contains", {name: "John Travolta"})实现这一目标的正确方法是什么,甚至可以使用Firestore吗?
谢谢。
发布于 2019-01-07 21:04:54
array-contains操作检查数组是否包含特定(完整)值。它无法检查对象数组是否包含具有属性特定值的项。
执行查询的唯一方法是向文档中添加一个附加字段,其值仅为要查询是否存在的值。例如:partyMemberNames: ["John Travolta", "Olivia Newton"]。
发布于 2019-01-07 22:25:16
正如Frank在他的回答中所解释的那样,使用数组包含无法查询存储在数组中的对象的特定属性。
但是,有一种可能的解决办法:实际上可以查询整个对象,在您的示例中如下所示:
db.collection('identites')
.where(
"partyMembers",
"array-contains",
{id: "7LNK....", name: "John Travolta"}
)也许这个方法能满足你的需要(或者不是……)。
发布于 2022-05-01 00:11:37
如果您想从文档中的"partyMembers“数组中提取名称:"John”。您可以通过类似的方法来实现这一点,在这种方法中,您可以遍历文档中的所有数组以找到这个名称。
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) );
}这种技术在perticular文档中使用,因为我们给了.doc(documentID)这种方法,您可以获得名称为"John“的所有数组的名称常量。
https://stackoverflow.com/questions/54081799
复制相似问题