Mongo查找对象内最长数组的查询

mik*_*029 10 mongodb

我目前在我的应用程序中为mongo设置了这样的对象(简化示例,为了清楚起见,我删除了一些不相关的字段):

{
    "_id" : ObjectId("529159af5b508dd71500000a"),
    "c" : "somecontent",
    "l" : [
        {
            "d" : "2013-11-24T01:43:11.367Z",
            "u" : "User1"
        },
        {
            "d" : "2013-11-24T01:43:51.206Z",
            "u" : "User2"
        }
     ]
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是运行一个查询查询来返回数组长度最大的对象在"l"下,并排序最高 - >最低,限制为25个结果.有些对象在数组中可能有1个对象,有些可能有100个.我想找出哪些对象在"l"下最多.我是mongo的新手,并且到目前为止还得到了其他所有工作,但我无法找出正确的参数来获得这个特定的查询.我感到困惑的是如何处理计算数组的长度,排序等.我可以通过解析集合中的所有内容来手动编码,但我确信mongo必须有一种方法来做到这一点.更有效率.我不反对学习,如果有人知道任何更高级的查询资源或者可以帮助我,我真的很感激,因为这是最后一块!:-)

作为旁注,node.js和mongo一起是惊人的,我希望我很久以前就开始使用它们了.

Asy*_*sky 17

使用聚合框架.这是如何做:

db.collection.aggregate( [
  { $unwind : "$l" },
  { $group : { _id : "$_id", len : { $sum : 1 } } },
  { $sort : { len : -1 } },
  { $limit : 25 }
] )
Run Code Online (Sandbox Code Playgroud)