0

ツイートのコレクションがあり、コレクション内で最も多くツイートするユーザー 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()です。user.idtotal

4

2 に答える 2

5

このgroup関数は MongoDB をサポートしていませんcursorここaggregateに記載されている方法を代わりに使用する必要があります。

次のようにする必要があります(テストされていません):

db.tweets.aggregate(
    { $group : {
        _id : "$user.id",
        total : { $sum : 1 }
    }}
).sort({total: -1});

group使用の詳細については、aggregate こちらをご覧ください。

于 2013-09-17T15:00:50.697 に答える