如何获得(Node.js)具有不同值的MongoDB文档,其中一些值最低?
我有这样一个集合:
{ 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' }
如何执行一个查询,导致selectname
是唯一的完整文档, value
是最低的? 例如:
{ name : 'a', value: 3, word : 'foo' }, { name : 'b', value: 110, word : 'bar' }
您可以在aggregation framework
使用$min
操作符来实现您想要的查询,如下所示:
db.collection.aggregate([ {$group:{_id:"$name", value:{$min:"$value"}}}, {$limit:2} ])
这个查询将返回:
{ "result" : [ { "_id" : "b", "value" : 110 }, { "_id" : "a", "value" : 3 } ], "ok" : 1 }
如果您希望对结果进行sorting,则还可以在pipe道中包含$sort
阶段。
编辑:您可以使用一个整洁的小窍门select其他元素不包括在$组的_id字段。 首先对文档进行sorting,然后使用$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 }