如何获得(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 }