gpt4 book ai didi

python - 如何执行嵌套字段的 mongoengine 查询?

转载 作者:可可西里 更新时间:2023-11-01 09:52:24 28 4
gpt4 key购买 nike

所以基本上我有这些文件

class Tag(Document):
name = StringField()
...

class Doc(Doument):
nameTag = ReferenceField(Tag)
tags = ListField(ReferenceField(Tag))

我想查询具有特定名称的名称标签。所以我认为问题在这里得到了回答 How to perform such filter queries in mongoengine on nested dicts or arrays contained in dict with python?

但是当我尝试查询时:

name="Hello"
docs1 = Doc.objects(nameTag__name=name)
docs2 = Doc.objects(tags__name=name)

我得到了错误

Cannot perform join in mongoDB: nameTag__name

最佳答案

仅提及所有选项。@Ross 是对的。 Mongodb 没有连接。但实际上你有 2 个选项(不只有一个):

  1. (由@Ross 描述)

you have todo two queries. One to get the matching Tag and then one to query the Doc collection and find any references to that Tag.

  1. 做一个聚合,mongoengine支持:

    docs1 = Doc.objects.aggregate(
    {"$lookup": {
    "from": "tag", # Tag collection database name
    "foreignField": "_id", # Primary key of the Tag collection
    "localField": "nameTag", # Reference field
    "as": "nameTag",
    }},
    {"$unwind": "nameTag"},
    {"$match": {"nameTag.name": name}})

$unwind 是必需的,因为 $lookup 返回文档列表。但在您的情况下,每个列表总是一个文档,因此您可以毫无疑问地使用此代码。

第二种方式似乎比第一种复杂得多。但是使用第一种方法你必须对数据库进行 2 次查询(第二种 - 只有一次)。在某些情况下,第二种方法会更有效。

关于python - 如何执行嵌套字段的 mongoengine 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387142/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com