查询数组中同一嵌入对象的2个属性

时间:2016-07-25 16:49:01

标签: mongodb

我有一个对象集合:

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 },
    ]
}

我想找到包含“key”等于“A”且其“value”大于5的元素的文档。

如果不使用聚合框架,不确定是否可行。

2 个答案:

答案 0 :(得分: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 :(得分:1)

这是查询

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

它使用$ elemMatch运算符。 $ elemMatch运算符匹配包含数组字段的文档,其中至少有一个元素匹配所有指定的查询条件。 (参考the documentation