我有一个这样的集合:
{
name : 'a',
value: 10,
word : 'baz'
},
{
name : 'a',
value: 65,
word : 'bar'
},
{
name : 'a',
value: 3,
word : 'foo'
},
{
name : 'b',
value: 110,
word : 'bar'
},
{
name : 'b',
value: 256,
word : 'baz'
}
如何执行导致选择name
唯一且<{1}}最低的完整文档的查询?value
最低? E.g:
{
name : 'a',
value: 3,
word : 'foo'
},
{
name : 'b',
value: 110,
word : 'bar'
}
答案 0 :(得分:2)
您可以使用$min
中的aggregation framework
运算符,通过以下查询实现您的目标:
db.collection.aggregate([
{$group:{_id:"$name", value:{$min:"$value"}}},
{$limit:2}
])
此查询将返回:
{
"result" : [
{
"_id" : "b",
"value" : 110
},
{
"_id" : "a",
"value" : 3
}
],
"ok" : 1
}
如果您希望对结果进行排序,还可以在管道中包含$sort
阶段。
编辑:您可以使用简洁的小技巧选择$ group&quot; _id字段中未包含的其他元素。首先对文档进行排序,然后使用$first
运算符:
db.collection.aggregate([
{$sort:{value:1}},
{$group:{_id:"$name", value:{$min:"$value"}, word:{$first:"$word"}}}
])
此查询将返回:
{
"result" : [
{
"_id" : "b",
"value" : 110,
"word" : "bar"
},
{
"_id" : "a",
"value" : 3,
"word" : "foo"
}
],
"ok" : 1
}