MongoDB 聚合框架 | 双重匹配

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"等,但都没起作用!

1个回答

23

你在 aggregate pipeline 中的操作符需要是单独的对象。同时,虽然某些版本的 shell(和驱动程序)可能允许将这些对象作为单独参数传递,但正确的方法是将它们包装在一个数组中进行传递。请尝试使用以下方法:

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

糟糕,我没意识到我只是缺少了括号哈哈。不过我很惊讶它还让我执行了函数。那我的操作不是非法的吗? - Michael Mikhjian
4
我认为Mongo只会选取对象中第一个属性并忽略其他属性。 - JohnnyHK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接