陣列我有一個集合,如下所示: -
{ "_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