我目前在我的应用程序中为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)
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |