firebase 如何从firestore集合中获取集合x中至少有一个doctorId值等于1的对象的所有文档

ewm0tg9j  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个文档集合,其中的文档遵循以下模型:

{
    "cardId": "12345678900",
    "phone": "123456789",
    "name": "Scott",
    "services": [
        {
            "name": "Estudios 3D para vías aéreas"
        },
        {
            "name": "Estudios 3D para ortodoncia"
        },
        {
            "name": "Estudios 3D para senos paranasales",
            "doctorId": "ASNDUasd981239nasd"
        },
        {
            "name": "Estudios 3D para implantes dentales",
            "pdfUrl": [],
            "imgUrl": [],
            "doctorId": 1
        },
        {
            "name": "Estudios 3D para vías aéreas",
            "imgUrl": [
                "https://firebasestorage.googleapis.com/v0/b/cid-imagenes.appspot.com/o/patients%2Fimages%2Frc-upload-1678379057443-9?alt=media&token=b156f890-aa2a-49e8-aa73-52260124b279"
            ],
            "pdfUrl": [
                "https://firebasestorage.googleapis.com/v0/b/cid-imagenes.appspot.com/o/patients%2Fdocuments%2Frc-upload-1678379057443-11?alt=media&token=c61378ba-413b-4e89-ba57-3a93e9f66a3f"
            ]
        }
    ],
    "lastname": "Castro",
    "birthdate": "Thu Mar 02 2023 15:43:23 GMT-0400 (hora estándar del Atlántico)",
    "gender": "M",
    "imgUrl": "",
    "type": "PATIENT",
    "email": "asdasd@asdasd.com",
    "referredById": 1
}

如果“services”数组中至少有一个对象包含值为1的doctorId属性,即react中的firebase库,那么我如何获取该集合的所有文档。
我试着用这个方法:

query(ref, where('services', 'array-contains-any', { doctorId: 1 }));

但是它不起作用,因为除了doctorId属性之外,“services”数组中的对象还有其他属性,所以它不匹配

pinkon5k

pinkon5k1#

array-containsarray-contains-any运算符将您指定的值与数组中的每个完整项进行比较,如果完全匹配,则返回文档。不能将它们用于部分匹配。
常见的解决方案是,像NoSQL数据库一样,添加额外的数据以支持用例,例如,您可以添加另一个包含所有医生ID的顶级数组字段:

doctorIds: [1]

然后可以使用array-contains查询该字段:

query(ref, where('doctorIds', 'array-contains', 1))

相关问题