检索其参考字段之一满足条件的文档

Retrieving a document where one of its reference fields fulfill a condition

我正在尝试根据其中一个字段的条件从 child 文档中检索 ID。这是文档架构。

class father(DynamicDocument):
    name = StringField

class child(DynamicDocument):
    name = StringField
    parent = ReferenceField('father')

如何获取父亲名字为 'Anakin' 的 child 的 ID?

我正在尝试这个查询:

Child.objects.filter(parent__name=Father.objects(name='Anakin').first().id).first().id

但结果是:

mongoengine.errors.InvalidQueryError: Cannot perform join in mongoDB: parent__name

由于 MongoDB 没有连接,因此在 1 个查询中没有简单的方法。

使用 MongoEngine 执行此操作的推荐方法是使用 2 个查询:

anakin = Father.objects(name='Anakin').first()
anakin_childs = Child.objects.filter(parent=anakin) #.first() if you are only interested in first match

您可能也对 CachedReferenceField 感兴趣,它缓存(即复制)父集合中的一些属性,允许您执行此类“连接”。但由于保持缓存属性与原始文档同步的开销,它会降低性能。