Mongodb聚合框架| 双重比赛

MKN*_*ons 8 mongodb aggregation-framework

这是它的样子 -

db.log.aggregate({
  $match:{ v:1, t:"trainingStep" },
  $group:{ _id:{userId:'$u',questionId:'$s'}, counts:{$sum:1} },
  $match:{ 'counts':{$gte:2} }
})
Run Code Online (Sandbox Code Playgroud)
  1. 第一场比赛是完美的.
  2. 该小组工作完美,并完全推出我正在寻找的东西.
  3. 最后一个$匹配不起作用,显示所有计数而不是我请求的> = 2

我试过'计数','$ count',"$ counts"......但是没有人能做到这一点!

Joh*_*yHK 21

aggregate管道中的每个运算符都需要是单独的对象.此外,虽然shell(和驱动程序)的某些版本可能允许将对象作为单独的参数传递,但正确的方法是将它们包装在单个数组中.试试这个:

db.log.aggregate([
  { $match: { v: 1, t: "trainingStep" } },
  { $group: { _id: {userId: '$u', questionId: '$s'}, counts: {$sum: 1} } },
  { $match: { 'counts': {$gte: 2} } }
])
Run Code Online (Sandbox Code Playgroud)

  • @MichaelMikhjian我认为mongo只获取它找到的第一个属性,并忽略其他属性. (4认同)