Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb MongoEngine中嵌套项的多条件查询_Mongodb_Mongoengine_Querying_Embedded Documents_Nosql - Fatal编程技术网

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
键入EmbeddedDocument
B
,它有两个字符串字段
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"})
[]