2016-07-25 13 views
0

我有对象的集合:查询在相同的嵌入对象的2个属性阵列中的

db.coll.find().pretty(); 

{ 
    "_id" : "1", 
    "elements" : [ 
     { "key" : "A", "value" : 10 }, 
     { "key" : "B", "value" : 1 }, 
    ] 
}, 
{ 
    "_id" : "2", 
    "elements" : [ 
     { "key" : "A", "value" : 1 }, 
     { "key" : "C", "value" : 33 }, 
    ] 
} 

我想查找所包含的“钥匙”等于“A”的元素的文件,其“值”大于5.

不确定在不使用聚合框架的情况下这是否可能。

回答

1

无结块,使用$elemMatch和查询将如下所示:

db.coll.find({"elements":{"$elemMatch":{"$and":[{"key":"A"},{"value":{"$gt":5}}]}}}).pretty() 

,或者如果你想使用聚合,然后用下面的查询对聚集

db.coll.aggregate({"$unwind":"$elements"},{"$match":{"$and":[{"elements.key":"A"},{"elements.value":{"$gt":5}}]}}).pretty() 
1

下面是该查询

db.coll.find({elements: {$elemMatch: {key: "A", value: {$gt: 5}}}});

它使用$ elemMatch操作符。 $ elemMatch操作符将包含数组字段的文档与至少一个匹配所有指定查询条件的元素相匹配。 (参照the documentation

相关问题