我有一个文档A
,其中包含特定的ListField b
输入EmbeddedDocument B
,它有两个StringField 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
实例
条目为B
和x=x1
的条目y=y1
。
我尝试使用两个contains
构建一个查询,每个值一个。
A.objects(b__x__contains="x1", b__y__contains="y1")
[<A: A object>]
成功案例有效。问题是条件是
独立,然后他们可以匹配列表b
的不同条目:
A.objects(b__x__contains="x1", b__y__contains="y2")
[<A: A object>]
在MongoEngine中,有没有办法确保这两个条件 将在同一条目中应用?
提前致谢。
答案 0 :(得分:1)
据我了解你的问题。您可以尝试$elemMatch
例如:Find Query
db.A.findOne(
{
b : {$elemMatch : {"x":"x1", "y":"y1"}}
}
);
希望这会对你有所帮助。
答案 1 :(得分:0)
我在MongoEngine Github的问题#379中找到了答案。
$ elemMatch已映射到field__match
。
因此成功案例有效:
A.objects(b__match={"x": "x1", "y": "y1"})
[<A: A object>]
错误的情况是失败了:
A.objects(b__match={"x": "x2", "y": "y1"})
[]
非常感谢Afil告诉我,我需要的东西相当于$ elemMatch。