2012-10-18 77 views
1
db.blog.save({ title : "My First Post", author: {name : "Jane", id : 1}}) 

由於命令不匹配,下面應該返回什麼?mongodb find()命令與模式命令不同

db.blog.find({"author" : {"id" : 1, "name" : "Jane"}}) 

編輯:

根據官方的MongoDB documentation,該keyorder必須(至少findOne())相匹配。它不會返回匹配對象使用db.blog.findOne({"author" : {"id" : 1, "name" : "Jane"}})

回答

0

通常情況下,作爲@JohnnyHK除了您已經顯示的示例外,查詢鍵的順序無關緊要:

db.blog.find({"author" : {"id" : 1, "name" : "Jane"}}) 

此查詢不會返回r結果不一致。使用他顯示的查詢:

db.blog.find({"author.id" : 1, "author.name" : "Jane"}) 

將與訂單無關。造成這種差異的原因是因爲在第一個查詢中,您正在通過對象進行搜索,因此查詢器實際上正在搜索該對象(以最簡單的方式)。這同樣適用於在包含一組子文檔的字段上創建的索引,該順序很重要。

0

根據JSON definition,鍵順序無關緊要。

An object is an unordered collection of zero or more name/value pairs 

我不知道MongoDB的事情,但我相信它遵循JSON的一般規則,此時它應該返回「我的第一篇」條目。

3

查詢選擇器中鍵的順序是不相關的。它不需要與添加搜索文檔時使用的鍵的順序相匹配。

UPDATE

如果你只是尋找一個順序無關的方式基於嵌入式文件進行查詢,則需要使用點符號:

db.blog.find({"author.id" : 1, "author.name" : "Jane"}) 
+0

那麼'db.blog.findOne({「author」:{「id」:1,「name」:「Jane」}})'return? – bouncingHippo

+0

@bouncingHippo對不起,它沒有點擊你在說嵌入對象。那將不會返回任何匹配。你想做什麼? – JohnnyHK

+0

即時通訊只是試圖查看'find()'是否嚴格遵循按鍵順序,就像'findOne()' – bouncingHippo