如何使用 mongoengine 查询为空的嵌入式文档
How can you query embedded document that is null with mongoengine
我是 mongoengine
的新手,正在查询。我得到了一个文档和一个嵌入式文档,如下所示:
class Plan(EmbeddedDocument):
name = StringField()
size = FloatField()
class Test(Document):
date = DateTimeField()
plan = EmbeddedDocumentField(Plan)
如何获取所有未设置大小的测试文档。也就是说size=null/None?
我用 __raw__ 查询尝试过,但这对我不起作用..
nested/embedded个文档的属性查询方式如下(doc):
class LightSaber(EmbeddedDocument):
color = StringField()
length = FloatField()
class Jedi(Document):
name = StringField()
light_saber = EmbeddedDocumentField(LightSaber)
saber1 = LightSaber(color='red', length=32)
Jedi(name='Obiwan', light_saber=saber1).save()
saber2 = LightSaber(color='yellow', length=None)
Jedi(name='Yoda', light_saber=saber2).save()
Jedi(name='Rey', light_saber=None).save()
for jedi in Jedi.objects(light_saber__length=None):
print(jedi.name)
# prints:
# Yoda
# Rey
也就是说,通过命名您的属性 "size",您遇到了极端情况。事实上 "size" 是一个 mongoengine operator 所以如果你查询 Test.objects(plan__size=None)
,你会得到一个错误,因为 MongoEngine 认为你想使用大小运算符。
要对 __raw__ 执行相同操作,您需要使用以下内容:
for jedi in Jedi.objects(__raw__={'light_saber.length': None}):
print(jedi.name)
使用 __raw__ 也可以很好地与 "size" 一起使用,在您的示例中是:Test.objects(__raw__={'plan.size': None})
我是 mongoengine
的新手,正在查询。我得到了一个文档和一个嵌入式文档,如下所示:
class Plan(EmbeddedDocument):
name = StringField()
size = FloatField()
class Test(Document):
date = DateTimeField()
plan = EmbeddedDocumentField(Plan)
如何获取所有未设置大小的测试文档。也就是说size=null/None? 我用 __raw__ 查询尝试过,但这对我不起作用..
nested/embedded个文档的属性查询方式如下(doc):
class LightSaber(EmbeddedDocument):
color = StringField()
length = FloatField()
class Jedi(Document):
name = StringField()
light_saber = EmbeddedDocumentField(LightSaber)
saber1 = LightSaber(color='red', length=32)
Jedi(name='Obiwan', light_saber=saber1).save()
saber2 = LightSaber(color='yellow', length=None)
Jedi(name='Yoda', light_saber=saber2).save()
Jedi(name='Rey', light_saber=None).save()
for jedi in Jedi.objects(light_saber__length=None):
print(jedi.name)
# prints:
# Yoda
# Rey
也就是说,通过命名您的属性 "size",您遇到了极端情况。事实上 "size" 是一个 mongoengine operator 所以如果你查询 Test.objects(plan__size=None)
,你会得到一个错误,因为 MongoEngine 认为你想使用大小运算符。
要对 __raw__ 执行相同操作,您需要使用以下内容:
for jedi in Jedi.objects(__raw__={'light_saber.length': None}):
print(jedi.name)
使用 __raw__ 也可以很好地与 "size" 一起使用,在您的示例中是:Test.objects(__raw__={'plan.size': None})