这是我的疑问:
db.getCollection('grades').
aggregate([{ "$match" : { "class_id" : 28, "student_id" : 0 } },
{ "$unwind" : "$scores" },
{ "$match" : { "scores.type" : "homework" } },
{ "$skip" : 3 }, { "$limit" : 3 },
{ "$group" : { "_id" : { "id" : "$_id" }, "scores" : { "$push" : "$scores" } } },
{ "$project" : { "_id" : "$_id.id", "scores" : 1 } }])
scores
- 是一个嵌套的对象数组。 Score object
- {type: "someType", score: someScore}
。此查询返回一个文档。
问题:scores
数组有6个对象,其中4个类型为homework
。
结果,我收到的内容:http://prntscr.com/bq217r
为什么skip-limit
在match
运营商之前执行了?我该如何解决?
答案 0 :(得分:1)
根据附带的截图,一切看起来都不错。
我们有4个元素1 2 3 4,然后我们跳过3,所以我们最后得到4 ...而53是值: - )
btw $match