2016-06-13 4 views
1

私は、ユーザーが共有する度合いに応じて、異なるコレクションの一意のドキュメントが繰り返し表示されるコレクションを持っています(例:item以下)。私は、最も共有されたドキュメントを見つける集約クエリを作成したいと思います。私は特定の基準に合っていないので、$一致は必要ありません。私は最も多くの人に問い合わせます。今、私は持っている:

db.stories.aggregate(
    { 
     $group: { 
      _id:'item.id', 
      'item': { 
       $first: '$item' 
      }, 
      'total': { 
       $sum: 1 
      } 
     } 
    } 
); 

しかし、これは1つの結果を返します。単純なfindクエリを実行するだけでよいかもしれませんが、結果が集計され、各結果にアイテムがあり、コレクションに何回出現したのかがわかります。ストーリーコレクション内のドキュメントの

例:

{ 
    _id: ObjectId('...'), 
    user: { 
     id: ObjectId('...'), 
     propertyA: ..., 
     propertyB: ..., 
     etc 
    }, 
    item: { 
     id: ObjectId('...'), 
     propertyA: ..., 
     propertyB: ..., 
     etc 
    } 
} 

usersitemsそれぞれが同様に自分のコレクションを持っています。

+1

入力ドキュメントの例を追加できますか? – profesor79

+0

[OK]は、ストーリーコレクションのサンプルドキュメントを追加しました。 – inorganik

+1

'item.id'の前に' $ 'をつける必要があります。 '$ id'の' $ id'を '_id: '$ item.id'に変更してください – styvane

答えて

0

変更

_id:'$item.id' 

にライン

_id:'item.id' 

現在のところ定数が 'item.id' とので、あなただけの結果として、一つの文書を取得することで、グループ。

関連する問題