检索其参考字段之一满足条件的文档
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 感兴趣,它缓存(即复制)父集合中的一些属性,允许您执行此类“连接”。但由于保持缓存属性与原始文档同步的开销,它会降低性能。
我正在尝试根据其中一个字段的条件从 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 感兴趣,它缓存(即复制)父集合中的一些属性,允许您执行此类“连接”。但由于保持缓存属性与原始文档同步的开销,它会降低性能。