为什么名称以下划线开头的集合处理方式不同?

时间:2016-08-04 18:56:17

标签: mongodb

集合的名称必须以字母或下划线开头。

那么为什么第一个有效,而最后两个没有?感谢。

> 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

1 个答案:

答案 0 :(得分:6)

根据documentation

  

如果您的集合名称包含特殊字符(例如下划线字符),那么要访问集合,请使用mongo shell中的db.getCollection()方法或驱动程序的类似方法。

根据documentation db.getCollection(name)方法

  

返回一个与使用db.collectionName语法在功能上等效的集合对象。该方法对于名称可能与shell本身交互的集合很有用,例如以_ 开头或与数据库shell方法匹配的名称。

因此,实际上您可以使用包含下划线(不在第一个位置)的名称来访问不使用db.getCollection()方法的集合。

下一个示例在mongo Shell中有效

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

只有当下划线位于第一个位置时,才能在mongo Shell中访问集合的唯一方法是使用db.getCollection()方法。

它没有区别对待,它只是mongo Shell的工作方式。