MongoDB 允許使用點符號對 JSON 子鍵或陣列元素進行查詢(請參閱ref1或ref2)。例如,如果a是檔案中的陣列,則以下查詢:
db.c.find({"a.1": "foo"})
回傳陣列中第二個元素a是"foo"字串的所有檔案。
到現在為止還挺好。
令人驚訝的是 MongoDB 接受對索引使用負值,例如:
db.c.find({"a.-1": "foo"})
這不會回傳任何內容(如果它是不受支持的語法就有意義),但我想知道為什么 MongoDB 在此操作時不回傳錯誤,或者它最終是否有意義。檔案(據我檢查)沒有提供任何線索。
歡迎任何有關這方面的資訊!
uj5u.com熱心網友回復:
那不是錯誤。該BSON規范定義了一個關鍵的名
零個或多個修改后的 UTF-8 編碼字符后跟“\x00”。(byte*) 不得包含 '\x00',因此它不是完整的 UTF-8。
由于"-1"該定義是一個有效的字串,所以它是一個有效的鍵名。
快速演示:
> db.test.find({"a.-1":{$exists:true}})
{ "_id" : 0, "a" : { "-1" : 3 } }
操場
還要注意該規范如何定義陣列:
陣列 - 陣列的檔案是一個普通的 BSON 檔案,鍵是整數值,從 0 開始并按順序繼續。例如,陣列 ['red', 'blue'] 將被編碼為檔案 {'0': 'red', '1': 'blue'}。鍵必須按數字升序排列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357778.html
上一篇:PassportJS無法讀取未定義的屬性(讀取“初始化”)
下一篇:mongodb內部物件到父級
