我很難理解爲什麼在處理查詢中的空值和數組索引時,mongodb發生以下情況。MongoDB在給定的位置正確地查詢數組中的'null'
假設我們有以下幾點:
> db.test.find()
{ "_id" : ObjectId("5852da24507d8c27f4e3c357"), "item" : null }
{ "_id" : ObjectId("5852da2d507d8c27f4e3c358"), "item" : { "something" : true } }
{ "_id" : ObjectId("5852da33507d8c27f4e3c359") }
當我試圖發現是空的,我得到ObjectId("5852da24507d8c27f4e3c357")
和ObjectId("5852da33507d8c27f4e3c359")
這是基於https://docs.mongodb.com/v3.2/tutorial/query-for-null-fields/
> db.test.find({"item" : null})
{ "_id" : ObjectId("5852da24507d8c27f4e3c357"), "item" : null }
{ "_id" : ObjectId("5852da33507d8c27f4e3c359") }
預期但當我嘗試項目做同樣的事情,但在一個給定索引的數組內,這是完全不同的一組結果:
假設我們有以下G:
> db.test.find()
{ "_id" : ObjectId("5852dbe1507d8c27f4e3c35c"), "a" : [ { "something" : true }, { "something" : true }, null ] }
{ "_id" : ObjectId("5852dbf4507d8c27f4e3c35d"), "a" : [ { "something" : true }, { "something" : true }, { "something" : true } ] }
{ "_id" : ObjectId("5852dbfb507d8c27f4e3c35e"), "a" : [ { "something" : true }, { "something" : true } ] }
但如果我這樣做基於2的指數爲空的查詢,我們仍然可以返回的所有文件:
> db.test.find({"a.2": null})
{ "_id" : ObjectId("5852dbe1507d8c27f4e3c35c"), "a" : [ { "something" : true }, { "something" : true }, null ] }
{ "_id" : ObjectId("5852dbf4507d8c27f4e3c35d"), "a" : [ { "something" : true }, { "something" : true }, { "something" : true } ] }
{ "_id" : ObjectId("5852dbfb507d8c27f4e3c35e"), "a" : [ { "something" : true }, { "something" : true } ] }
這對我來說似乎並不像其作爲工作預期?但是我們可以看到但該指數位置正常工作,我們可以做以下查詢:
> db.test.find({"a.2": {something:true}})
{ "_id" : ObjectId("5852dbf4507d8c27f4e3c35d"), "a" : [ { "something" : true }, { "something" : true }, { "something" : true } ] }
這是MongoDB的內部錯誤和處理數組和空值?
我不知道這是否是預期的行爲,也許是個bug,因此我創建[JIRA SERVER-27442(https://jira.mongodb.org/browse/SERVER-27442)那並不是 – styvane