我有一个推文集合,我想找到一个在集合中发布最多推文的用户 ID。所以我group首先做的是sort:
db.tweets.group( { key: {"user.id": 1}, reduce: function (curr, result) { result.total += 1; }, initial: {total: 0} }).sort({total: -1})
但是,mongo shell 抱怨说:
TypeError: db.tweets.group({key:{'user.id':1}, reduce:function (curr, result) {result.total += 1;}, initial:{total:0}}).sort({total:-1}) is not a function (shell):1
我参考了mongodb doc,我认为我的语法sort应该是正确的?另外,有什么区别aggregate?我想做的更好aggregate吗?
我在这里有点困惑,因为没有sort,命令db.tweets.group( { key: {"user.id": 1}, reduce: function (curr, result) { result.total += 1; }, initial: {total: 0} })给了我这样的东西:{
"user.id" : 1477500938,
"total" : 1
}
这看起来是正确的,这也是可以运行的:db.tweets.group( { key: {"user.id": 1}, reduce: function (curr, result) { result.total += 1; }, initial: {total: 0} }).sort()只是它似乎既不是 sort byuser.id也不是total.
该group函数不支持 MongoDB cursor。您应该使用此处aggregate记录的方法。
应该是这样的(未测试):
db.tweets.aggregate(
{ $group : {
_id : "$user.id",
total : { $sum : 1 }
}}
).sort({total: -1});
Run Code Online (Sandbox Code Playgroud)
有关在此处group使用的更多详细信息。aggregate
| 归档时间: |
|
| 查看次数: |
3227 次 |
| 最近记录: |