我正在尝试获取具有最大值的文档列表。如果我知道具有最大值的文档数(例如在另一个stackoverflow解决方案“ mongodb如何从集合中获取最大值”的解决方案中),则可以指定它,但是如果我不知道该怎么做,我可以指定它。不知道文件数量是多少。
例如,使用以下文档:
{name:"a", age:10}
{name:"b", age:11}
{name:"d", age:12}
{name:"c", age:12}
因此,我知道有2个文档的最大年龄为12岁。因此,我可以编写以下查询
db.collection.find().sort({age: -1).limit(2)
我使用它limit(2)
是因为我知道有2个文档的最大值,但是如何使它自动化?我可以对具有最大值的记录进行计数,将其存储在变量中并像这样使用limit(n)
吗?还有其他方法吗?
您可以使用聚合框架来获得结果
var group = {$group:{_id:"$age", names:{$push:"$name"}, count:{$sum:1}}}
var sort = {$sort:{"_id":-1}}
var limit= {$limit:1}
db.selrac.aggregate([group, sort, limit])
输出看起来像这样:
{
"_id" : 12.0,
"names" : [
"d",
"c"
],
"count" : 2.0
}
或者如果需要完整的文档参考,请用以下内容替换组:
var group = {$group:{_id:"$age", fullDocument:{$push:"$$ROOT"}, count:{$sum:1}}}
输出:
{
"_id" : 12.0,
"fullDocument" : [
{
"_id" : ObjectId("57509a890d4ae20f6de06657"),
"name" : "d",
"age" : 12.0
},
{
"_id" : ObjectId("57509a890d4ae20f6de06658"),
"name" : "c",
"age" : 12.0
}
],
"count" : 2.0
}
欢迎任何意见!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句