我需要创建一个复合查询,用于检索数组中映射中具有特定值的所有文档。我的数据库中有用的部分如下所示:
appointments(collection)
doc1(document)
people(array)
person1(map)
userId(field)
person2(map)
userId(field)
我需要获取所有具有特定userId的人员的文档(如doc1(,userId是常量。我对需要发生的事情有一个全局性的想法,但我并不真正理解这个查询。我目前有以下几种:
const snapshot = db.collection('appointments').where('people.userId', 'array_contains', userId).get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
db.collection('appointments').doc(doc.id).update({
//Change the data I need to change
},{merge:true});
});
});
我不知道如何构造这个where子句。有人能帮我吗?提前感谢!
在Firestore中不可能查询数组中的嵌套映射值。您必须将这些数据转换为可以查询的数据,或者将足够多的数据复制到另一个字段中以使其成为可能。
您可以做的一件事是创建一个只包含用户ID字符串的新字段,并在该数组上使用一个包含查询的数组。