44

I have a collection I'm unable to drop, I'm assuming that the "-" in its name is a special character. In MongoDB, what is the best way to escape special characters?

> db.tweets.drop();
true

BUT

> db.tweets-old.drop();
ReferenceError: old is not defined (shell):1

I've tried to escape with quotes (both single and double) and a slash, but nothing works.

jbnunn
  • 6,161
  • 4
  • 40
  • 65

2 Answers2

81

The following works:

db["tweets-old"].drop();

It's called the square bracket notation, which allows you to use special characters in property names.

Community
  • 1
  • 1
Niels van der Rest
  • 31,664
  • 16
  • 80
  • 86
  • 1
    :).. i had given up and changed name of the collection, but yes this works!! – Mahesh Oct 14 '15 at 12:25
  • Note, in my experience with Mongo 4.4, you cannot use this notation IF the collection doesn't yet exist. If it doesn't or you're not sure, follow the answer of @BlakesSeven below -- i.e. db.getCollection("tweets-old") – Ciabaros Oct 17 '20 at 20:31
16

So does:

db.getCollection("tweets-old").drop()

And that has been around for a while now.

In addition, the method call also mimics what is the general "get a collection" accessor method in all officially supported MongoDB drivers. So the suggestion here is that you get used to using it this way, since the "named collection" accessor is how it is generally done.

Blakes Seven
  • 49,422
  • 14
  • 129
  • 135
  • This was very useful, since the bracket notation threw a syntax error for me despite the engine did support it. Thanks! – p4bloch Sep 07 '20 at 14:00