firebase 如何查询复杂的firestore文档(对象嵌套列表)?

vuktfyat  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(128)

我有这份文件:

{
    "artifact": {
        "id": 1,
        "tags" : [
            "art",
            "art2"
        ],
        "origins": [
            {
                "id": 2,
                "tags" : [
                    "o1",
                    "o11"
                ],
                "origins": [
                    {
                        "id": 3,
                        "tags" : [
                            "o2",
                            "o3"
                        ]
                    }
                ]
            }
        ]
    },
    "insertionDate": "15022023095425"
}

我需要编写一个查询来检查一个id是否与另一个文档的最深起源对象的id匹配。
一开始,我以为这样会有用:

common_elements = db.collection("tasks").where("artifact.origins.origins.id", "==", current_item_id)

是否可以使用Firestore查询嵌套列表中的对象属性?
如果这是不可能的,我应该如何重塑我的数据?我可以在另一个集合中存储origin对象并在本文档中引用它们吗?

r7s23pms

r7s23pms1#

我需要编写一个查询来检查一个id是否与另一个文档的最深起源对象的id匹配。
使用实际的数据库模式you cannot perform such a query。如果只需要按最深的ID从tasks集合中筛选文档,则应考虑在文档内创建一个名为deepestId的非嵌套字段,在示例中该字段应包含3的值,并执行以下查询:

common_elements = db.collection("tasks").where("deepestId", "==", 3)

如果这样的查询可以返回多个结果,那么您应该添加另一个where()调用,以基于deepestIdid过滤文档,如下所示:

common_elements = db.collection("tasks").where("deepestId", "==", 3).where("id", "==", 1)

另一个可能的解决方案是通过创建另一个集合来复制数据,该集合应该只包含带有deepestId == 3的任务。

相关问题