阵列我有一个集合,如下所示: -
{ "_id" : 1, "grades" : [ 70, 87, 90 ] }
{ "_id" : 2, "grades" : [ 90, 88, 92 ] }
我使用下面的查询: -
db.students.find({ semester: 1, grades: { $gte: 85 } },
{ "grades.$": 1 })
我得到的结果如下: -
{ "_id" : 1, "grades" : [ 87 ] }
{ "_id" : 2, "grades" : [ 90 ] }
现在我的问题是,当我在字段级上使用$ gte时,它将检查数组中是否有任何元素匹配条件,修改文件。那么为什么我得到第一个文档的输出为87而不是70.我知道我们已经指定了一个相等条件“等级:{$ gte:85}”,但它已经将完整的文档返回给我并投影了第一个字段。那么为什么87是输出?
我有一个疑问,在这里,我有什么在我的脑海的是,当我们查询任何与投影则发生两件事情。 1)光标被返回以满足条件,以便在这种情况下,它是文件{ “_id”:1,学期:1, “等级”:[70,87,90]} { “_id”:2 ,学期:1,“成绩”:[90,88,92]}。 2)现在,投影应用,我们得到这是 第一个元素{ “_id”:1,学期:1, “等级”:[70]} { “_id”:2,学期:1, “等级” :[90]} 那么为什么87在第一场呢? $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ – Saumyaraj
的投影光标的一部分,它不是发生*之后*光标已返回的结果,但光标迭代过程中使用,所以它有关于匹配过程的知识,是的,否则将无法进行二次操作做它做的事。 – mnemosyn