2012-04-26 72 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