集合的名称必须以字母或下划线开头。
那么为什么第一个有效,而最后两个没有?感谢。
> 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
答案 0 :(得分:6)
如果您的集合名称包含特殊字符(例如下划线字符),那么要访问集合,请使用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的工作方式。