我有一个对象集合:
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的元素的文档。
如果不使用聚合框架,不确定是否可行。
答案 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)