MongoDB 组和排序类型错误:不是函数

clw*_*wen 0 mongodb

我有一个推文集合,我想找到一个在集合中发布最多推文的用户 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.

Pie*_*ois 5

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