MongoDB Shell - 如何访问集合名中包含句点的集合?

36

我在我们的MongoDB数据库中发现一个名为my.collection的集合。

尽管它的名称包含了一个点,但是否有办法从MongoDB shell访问这个集合呢?

> db.my.collection.findOne();
null

我非常确定那是不正确的。


它适用于名称中带有点的map/reduce集合,例如tmp.mr.mapreduce_1294927200_2363 - Nekresh
4个回答

104

可以尝试使用这个:

db["my.collection"].findOne();

如果使用连字符或任何其他名称不匹配的名称,则会遇到相同的问题,它们无法匹配[a-zA-Z_$][0-9a-zA-Z_$]。

这种限制源于JavaScript对象属性的有效命名。


7
我认为这应该是被接受的答案,因为它解释了语法并提供了一个有用的解决方法。 - jschreiner
请问如何删除'Model\Tag_keys'集合?使用以下方法无法正常工作:db['Model\Tag_keys'].drop() - Irshad Khan
对于不遵循JS对象属性命名规则的数据库名称,下面有另一种解决方案,基于db.getCollection('_name') - DrakaSAN

13

如果集合名称为"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


11

另一个百分百可靠的方法是:

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

1
这应该是答案。在 shell 中,对于名为“1”的集合,没有其他方法可行。 - pferrel

1

你的代码是正确的。如果返回 null,这意味着集合为空。


1
我遇到了类似的问题,发现Mongo shell报错“SyntaxError: unexpected token ILLEGAL”... 我发现下面Laura的回答是访问名称中带有句点的集合的方法。 - Kickaha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接