Mongodb MongoEngine中嵌套项的多条件查询
我有一个文档Mongodb MongoEngine中嵌套项的多条件查询,mongodb,mongoengine,querying,embedded-documents,nosql,Mongodb,Mongoengine,Querying,Embedded Documents,Nosql,我有一个文档a,其中包含一个特定项目的列表字段b 键入EmbeddedDocumentB,它有两个字符串字段x和y class B(EmbeddedDocument): x = StringField() y = StringField() class A(Document): b = ListField(EmbeddedDocumentField(B)) 让我们先填充它们: b1 = B(x="x1", y="y1") b2 = B(x="x2", y="y2")
a
,其中包含一个特定项目的列表字段b
键入EmbeddedDocumentB
,它有两个字符串字段x
和y
class B(EmbeddedDocument):
x = StringField()
y = StringField()
class A(Document):
b = ListField(EmbeddedDocumentField(B))
让我们先填充它们:
b1 = B(x="x1", y="y1")
b2 = B(x="x2", y="y2")
a = A(b=[b1, b2])
a.save()
我想搜索A
的一个实例,该实例包含一个特定的
带有值x=x1
和y=y1
的条目B
我试图构建一个包含两个的查询,每个值一个
A.objects(b__x__contains="x1", b__y__contains="y1")
[<A: A object>]
在MongoEngine中,有没有办法确保这两个条件
是否将应用于同一条目
提前谢谢。我理解你的问题。您可以尝试$elemMatch
例如:查找查询
db.A.findOne(
{
b : {$elemMatch : {"x":"x1", "y":"y1"}}
}
);
希望这对您有所帮助。我在MongoEngine Github的一个问题中找到了答案
$elemMatch已映射到字段\u匹配
因此,成功案例是有效的:
A.objects(b__match={"x": "x1", "y": "y1"})
[<A: A object>]
非常感谢Afil向我展示我所需要的相当于$elemMatch。嗨,Afil,非常感谢你的快速回答!我想最好通过MongoEngine来做。如果我无法完成,请记住我可以在MongoEngine上拨打MongoDB电话并使用$elemMatch。非常好的问候!
A.objects(b__match={"x": "x1", "y": "y1"})
[<A: A object>]
A.objects(b__match={"x": "x2", "y": "y1"})
[]