首页 > 解决方案 > 在数组 Firestore 中使用地图的复合查询

问题描述

我需要创建一个复合查询来检索数组中映射中具有特定值的所有文档。我的数据库的有用部分如下所示:

appointments(collection)
    doc1(document)
        people(array)
            person1(map)
                userId(field)
            person2(map)
                userId(field)

我需要获取具有特定 userId 的人员的所有文档(如 doc1),该用户 ID 是一个常量。我对需要发生的事情有一个全球性的想法,但我并不真正理解这个查询。我目前有以下内容:

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 子句。谁能帮我这个?提前致谢!

标签: firebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


在 Firestore 中无法查询数组中的嵌套映射值。您必须将此数据转换为可以查询的内容,或者将足够多的数据复制到另一个字段中以使其成为可能。

您可以做的一件事是创建一个仅包含用户 ID 字符串的新字段,并对该数组使用包含数组的查询。


推荐阅读