我有这份文件:
{
"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对象并在本文档中引用它们吗?
1条答案
按热度按时间r7s23pms1#
我需要编写一个查询来检查一个id是否与另一个文档的最深起源对象的id匹配。
使用实际的数据库模式you cannot perform such a query。如果只需要按最深的ID从
tasks
集合中筛选文档,则应考虑在文档内创建一个名为deepestId
的非嵌套字段,在示例中该字段应包含3
的值,并执行以下查询:如果这样的查询可以返回多个结果,那么您应该添加另一个
where()
调用,以基于deepestId
和id
过滤文档,如下所示:另一个可能的解决方案是通过创建另一个集合来复制数据,该集合应该只包含带有
deepestId == 3
的任务。