9

これがどのように見えるかです-

db.log.aggregate({
  $match:{ v:1, t:"trainingStep" },
  $group:{ _id:{userId:'$u',questionId:'$s'}, counts:{$sum:1} },
  $match:{ 'counts':{$gte:2} }
})
  1. 最初の試合は完璧に機能します。
  2. グループは完璧に機能し、私が探しているものを正確に押し出します。
  3. 最後の$matchは機能せず、要求された> = 2ではなく、すべてのカウントが表示されます

'counts'、'$ counts'、 "$ counts"を試しましたが、どれもうまくいきませんでした。

4

1 に答える 1

23

パイプラインの各演算子は、aggregate個別のオブジェクトである必要があります。また、シェル(およびドライバー)のバージョンによっては、オブジェクトを個別のパラメーターとして渡すことができる場合がありますが、正しい方法は、オブジェクトを単一の配列にラップして渡すことです。代わりにこれを試してください:

db.log.aggregate([
  { $match: { v: 1, t: "trainingStep" } },
  { $group: { _id: {userId: '$u', questionId: '$s'}, counts: {$sum: 1} } },
  { $match: { 'counts': {$gte: 2} } }
])
于 2012-10-30T19:34:51.983 に答える