2016-08-04 62 views
2

集合的名稱必須以字母或下劃線開頭。爲什麼名稱以下劃線開頭的集合的處理方式不同?

那麼爲什麼第一個工作,而最後兩個不工作?謝謝。

> db.getCollection("_20160712").find() 
{ "_id" : ObjectId("57a38e4991c3b3a393e9be2b"), "dimension_id" : 2, "attribute" : "good", "hour" : "20160712_06", "frequency_count" : 100 } 
> db._20160712.find() 
2016-08-04T14:53:56.963-0400 E QUERY [thread1] TypeError: db._20160712 is undefined : 
@(shell):1:1 
> db['_20160712'].stats() 
2016-08-04T14:52:43.964-0400 E QUERY [thread1] TypeError: db._20160712 is undefined : 
@(shell):1:1 

回答

6

根據documentation

如果您收藏名稱包含特殊字符,如下劃線字符,然後訪問該集合使用db.getCollection()方法在蒙戈外殼或類似方法爲您的驅動程序。

根據documentationdb.getCollection(name)方法

返回集合對象在功能上等同於使用db.collectionName語法。該方法對於名稱可能與shell本身交互的集合非常有用,例如以_開頭的名稱或與數據庫shell方法匹配的名稱。

所以,其實你可以與包括下劃線(不是在第一位置)無db.getCollection()方法名稱訪問集合。

下一個例子是有效的蒙戈殼牌

db.collection_.find(); 
db.collection_1.find(); 

只有當下劃線是在第一個位置,您可以在蒙戈殼牌訪問收藏的唯一方法是通過使用db.getCollection()方法。

它沒有被區別對待,它只是mongo Shell的工作原理。

+0

在倒數第二段應該讀取db.getCollection()而不是db.getConnection() – boliva

+1

@boliva謝謝,編輯過 – tarashypka

相關問題