我在我们的MongoDB数据库中发现一个名为my.collection
的集合。
尽管它的名称包含了一个点,但是否有办法从MongoDB shell访问这个集合呢?
> db.my.collection.findOne();
null
我非常确定那是不正确的。
我在我们的MongoDB数据库中发现一个名为my.collection
的集合。
尽管它的名称包含了一个点,但是否有办法从MongoDB shell访问这个集合呢?
> db.my.collection.findOne();
null
我非常确定那是不正确的。
可以尝试使用这个:
db["my.collection"].findOne();
如果使用连字符或任何其他名称不匹配的名称,则会遇到相同的问题,它们无法匹配[a-zA-Z_$][0-9a-zA-Z_$]。
这种限制源于JavaScript对象属性的有效命名。
db['Model\Tag_keys'].drop()
。 - Irshad Khandb.getCollection('_name')
。 - DrakaSAN如果集合名称为"my.collection"
db.my.collection.findOne(); // 正常
null
如果集合名称为"my.1.collection"
db.my.1.collection.findOne(); // 不正常
SyntaxError: missing ; before statement
解决方法:
db["my.1.collection"].findOne(); // 现在正常了
null
另一个百分百可靠的方法是:
db.getCollection("_SCHEMA").find()
如果名称中有下划线,则仍会导致错误,如@Laura的回答所述:
> db["_SCHEMA"].find()
2016-07-18T17:44:16.948+0200 E QUERY [thread1] TypeError: db._SCHEMA is undefined :
@(shell):1:1
你的代码是正确的。如果返回 null,这意味着集合为空。
tmp.mr.mapreduce_1294927200_2363
。 - Nekresh