2012-04-26 2 views
2

Мне нравится MongoDB, и мне небезразлична небольшая двусмысленность, и мне было интересно, видел ли кто-нибудь это раньше и, возможно, знал бы ответ :-).mongo точка обозначение неоднозначность

в Монго, чтобы достичь в подобъектов, можно использовать точечную нотацию, например:

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

Что происходит, когда вы пытаетесь выполнить эти запросы в оболочке монго? – maerics

ответ

7

Ключ такой как «address.state» не является законным. Из here:

Имена полей не могут содержать точки (т.е. .) или нулевые символы, и они не должны начинаться со знака доллара (т.е. $).

+0

Я смотрел сайт монго, но не видел, что полностью отвечает на вопрос :-). –