查询嵌套字段时如何使用mongoengine查询操作符

How to use mongoengine query operators when querying nested fields

我正在尝试使用 python 和 mongoengine 在 mongodb 数据库中搜索文本。 mongodb 中的文档结构如下:

{'title': "Food will define the future',
        'paragraphs':[
             {'text': 'Consumers in the UK are drinking less milk',
              'labels': ['market trends', 'UK']},
             {'text': 'In France, people eat a lot of cheese',
              'labels': ['market trends', 'France']}
          ]
}

使用mongoengine,我想在每个文档的文本字段中搜索关键字(例如'milk'),如下:

class Article(db.Document):
    title = StringField()
    paragraphs = ListField()


selection = Article.objects(paragraphs__text__contains = 'milk')

操作员 'contains' 似乎没有做任何事情。仅返回包含单词 'milk' 且没有其他内容(即完全匹配)的段落。出了什么问题?如何正确执行此操作?

我设法使事情正常进行。以前,在我的模型中,段落被定义为 ListField(),如下所示:

class Article(db.Document):
    title = StringField()
    paragraphs = ListField()

现在,我已经明确地将段落定义为 EmbeddedDocumentListField(),就像这样

class Paragraph(EmbeddedDocument):
    text = StringField()
    labels = ListField()

class Article(db.Document):
   title = StringField()
   paragraphs = EmbeddedDocumentListField(Paragraph)

此更改后,查询(包括运算符 'contains')的行为符合预期。

我仍然不太明白为什么需要嵌入文档的显式定义才能使其正常工作。所以如果有人愿意解释,请...