2012-04-26 73 views
2

我喜歡MongoDB,並且出現了一些模糊不清的情況,我想知道是否有人曾經見過這個,可能會知道答案:-)。mongo dot notation ambiguity

在蒙戈,伸進子對象,你可以使用點符號,例如:

db.persons.find({ "address.state" : "CA" }) 

這是很簡單的。如何(如果這樣做的話)的確蒙戈處理之間的區別:因爲點

{ 
    "address" { "state" : "CA" } 
} 

{ 
    "address.state" : "CA" 
} 

是合法的鑰匙,據我所知。此外,我認爲,這將是一個合法的文檔,以及:

{ 
    "address" { "state" : "A" }, 
    "address.state" : "B" 
} 

在這種情況下,我可以看到這個查詢返回要麼"A""B":可能出現

db.persons.find({}, {"address.state"}) // all docs selecting address.state as result. 

類似的潛在問題我想象使用數組,以及:

{"a":["test"]} 

這可能是與訪問:

{"a.0"} 

當然

{"a" {"0" : "test"} } 

這也將是訪問和:

{"a.0"} 

想法?經驗?傳統的智慧是不是這樣做的?

+0

當你在mongo shell中嘗試這些查詢時會發生什麼? – maerics 2012-04-26 13:22:07

回答

7

「address.state」等密鑰不合法。從here

字段名稱不能包含點(即.)或空字符,而且他們不能以美元符號(即$)開始。

+0

我看着mongo網站,但沒有看到它,完全回答了這個問題:-)。 – 2012-04-26 15:07:39