2

ID に関連付けられたドキュメントの数を数え、結果を並べ替えようとしています。ドキュメントの例を次に示します (mediaコレクション内)。

{
  "_id" : "00wlz2j2cu9kx",
  "uploadedBy" : { 
    "uid" : "00wen1b4tfwn6",
  }
}

基本的に、これらすべてのドキュメントを でグループ化しuploadedBy.uid、結果の配列をドキュメントの数で並べ替える必要があります。これまでのところ、次のコマンドがあります。

db.media.group({
  key: {
    'uploadedBy.uid' : true
  },

  reduce: function(obj, prev) {
    prev.total += 1
  },

  initial: {
    total: 0
  }
})

結果としてこの配列が得られます。

[
  {
    "uploadedBy.uid" : "00wen1b4tfwn6",
    "total" : 1
  },
  {
    "uploadedBy.uid" : "00wp0s9c73dvl",
    "total" : 2
  }
]

次に、これらの各ドキュメントをtotalフィールドで並べ替える必要があります。どうすればいいですか?

4

2 に答える 2

2

node.jsが集約フレームワークをサポートしている場合は、それを使用してみてください

db.media.aggregate([
    {$group: {_id: '$uploadedBy.uid', 'count': {$sum: 1}}},
    {'$sort': {'count': -1}}
])

このコードに問題がないかどうかはわかりませんが、このようなことを試すことができます。

編集 クエリが正しく機能するように変更しました。この答えは私にとってはうまくいきました。以下に示すように、ここにスキップ/制限を追加して、上位 5 つの結果を取得することもできます。

db.media.aggregate([
    {$group: {_id: '$uploadedBy.uid', 'count': {$sum: 1}}},
    {'$sort': {'count': -1}},
    {'$skip': 0},
    {'$limit': 5}
])
于 2013-04-29T20:00:00.640 に答える