2016-07-25 42 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

相關問題