🍃

MongoDBのCollection名には`-`を入れない方が良さそう

2022/08/12に公開

はじめに

最近 MongoDB を使い始めて、下記エラーに遭遇して対応したので、その記録。

uncaught exception: ReferenceError: collection is not defined

試したこと

-がないときー ↓

MongoDB では Collection(RDB のテーブルみたいなやつ)にアクセスするとき、こんな感じでアクセスできる。

> db.createCollection('hoge');
{ "ok" : 1 }
> show collections
hoge
> db.hoge.count()
0

-があるときー ↑

hoge-collectionみたいに、-が入ってた場合、こんな感じでエラーが出る。

> db.createCollection("hoge-collection")
{ "ok" : 1 }
> show collections
hoge-collection
> db.hoge-collection.find()
uncaught exception: ReferenceError: collection is not defined :
@(shell):1:1

何でかよくわからず、検索してたら、解決方法見つけた。
I get the following ReferenceError... please help - MongoDB University / M001: MongoDB Basics - MongoDB Developer Community Forums

Subtraction Operatorとして扱われちゃうみたいなこと書かれてた(since the MongoDB Shell is an interactive JavaScript interface, it treats the - as the Subtraction Operator.)。マジかよ。スペースないのに。
なので、getCollection()[""]を使う必要がある。

> db.getCollection("hoge-collection").count()
0
> db["hoge-collection"].count()
0

Subtraction Operatorって本当かなと思って、引き算してみた。確かに、スペースなくても引き算してる。

> a=3
3
> b=1
1
> a-b
2

回答してくれてる人らが言うように、-使わないのが無難そう。

In general, to avoid such error you can use the underscore ("_") within the collection name, instead of the hyphen

おわりに

エラーメッセージだけ読んでても、よくわからんかった。
-使わない方が無難ってのは、MongoDB 使ってる人的に一般的なのかもやけど、使い始めなので、軽くハマった。
もうちょい、MongoDB の日本語情報増えてくると良いなぁ。

GitHubで編集を提案

Discussion