MongoDBでコレクションに名前を付けるための規則はありますか?


回答:


90

一般的な規則は次のとおりです。

  • 小文字の名前:MongoDBコレクション名では大文字と小文字が区別されるため、大文字と小文字の区別の問題が回避されます。
  • 複数形:何かのコレクションに複数形のラベルを付ける方が明白です。たとえば、「ファイル」ではなく「ファイル」です。
  • 単語区切り文字なし:異なるユーザーが(誤って)単語を区切る問題を回避します(ユーザー名<->ユーザー名、名<->名)。これはこのあたりの数人によると議論の余地がありますが、引数がコレクション名に分離されている場合は、そうすべきではないと思います;)アンダースコアまたはキャメルケースを追加してコレクション名の読みやすさを向上させている場合コレクション名が長すぎるか、コレクションの分類の標準であるピリオドを適切に使用する必要があります。
  • より詳細なコレクションのドット表記:コレクションがどのように関連しているかを示します。たとえば、「users」を削除した場合、スキーマを設計した人がうまく機能していれば、「users.pagevisits」を削除できると合理的に確信できます;)

例:

users
pagevisits
users.pagevisits

キャメルケースはかなり一般的ですが、フィールド名の規則は同じロジックのいくつかに従う必要があります。


33
特にPythonでMongoDBを使用している場合は、「単語区切り文字なし」のこと全体について意見が分かれる必要があります。スペースの代わりにアンダースコアは非常に読みやすく、コードやスキーマなどの最も望ましい品質の1つです。
Noah McIlraith 2012

2
主観性は美しいものです;)フィールド名またはコレクション名に非常に多くの単語が含まれているためにコードの可読性が向上する場合は、名前全体を再検討する必要があります。もちろん、それぞれに。私は、どの単語がはるかに大きな問題に分離されるかについて、起こりうる矛盾の問題を見つけます。単語区切り文字を使用しないことは、比較的言語に依存しません。アンダースコアを好む場合、Java開発者はおそらくキャメルケースを好むでしょうし、それは急いで厄介になります。
Remon van Vliet 2013年

7
複数形ではなく単数形です。それ以外の場合は、複数形のPojosなどのオブジェクトにマップされ、Usersクラスになります。ユーザークラスではなく
ricardoespsanto 2014

4
@リッキーだと思います。あなたが言及している答えは、ここで混同されているのと同じ概念を混同しているということです。エンティティの命名とコレクションの命名。SQLテーブル名としてCUSTOMERSを使用している場合でも、その回答の作成者が示唆しているように、エンティティ名として「Customers」を使用する人は誰もいません。あなたが言うように、それは非常に主観的な議論です。コードベース全体で一貫している限り、それほど問題になることはありません。
Remon van Vliet 2014年

3
複数形が暗示されているので、単数形の方が理にかなっていると思います。そして@Rickyが言うように、この標準はずっと前にsqlで確立されました。stackoverflow.com/questions/338156
2015年

32

コレクション名にハイフンを使用しないでください。

これは、以下の2つの呼び出しのCLIを使用する場合、最初の呼び出しが無効なJavaScriptであるためです。

db.foo-bar.find();
db['foo-bar'].find();

どちらも機能的には同じですが、2つ目は入力が少し面倒で、タブで完了しません。

それとは別に、長所/短所はコレクションの使用に依存します。一貫性を保つことは、どの規則を選択するかよりも重要です。


ある:のように、コレクション名を名前空間を有効ためfoo:bar
ラフィアン2012年

モンゴには何でも有効です。例db["\n"].insert({});-エラーなし。考慮すべきことは、ほとんどの場合、使用しているドライバーの利便性です。
AD7six 2012年

1
これは、Windowsの2.2で変更されました:/ \。「* <>:|有効なされなくなりました-参照してください?docs.mongodb.org/manual/release-notes/2.2/...
toong

5
@toong、これはデータベース名用であり、コレクション用ではありません。
BorisOkunskiy 2013年

19

http://docs.mongodb.org/manual/reference/limits/、手動の状態は、コレクション名で始まるべきだとアンダースコア(「_」)または文字の文字、とすることはできません。

  • $が含まれています。
  • 空の文字列(例: "")である。
  • ヌル文字が含まれています。
  • システムから始めます。プレフィックス。(内部使用のために予約されています。)

ただし、ルールに従って「_TWII」のように先頭文字が「_」のコレクションを作成すると、コレクションを削除するときに問題が発生します。以下のテストとそれを修正する方法を参照してください。コレクション「_TWII」は「people」データベースの下に作成されました。

> show collections
_TWII
employees
system.indexes
> db._TWII.drop()
2015-02-19T16:34:56.738-0800 TypeError: Cannot call method 'drop' of undefined

> use admin
switched to db admin

> db.runCommand({renameCollection:"people._TWII",to:"people.TWII"})
{ "ok" : 1 }
> use people
switched to db people
> show collections
TWII
employees
system.indexes
> db.TWII.drop()
true
> show collections
employees
system.indexes
> 

'people' dbの下にあるときに_TWIIコレクションを削除するためのショートカット:

> db.createCollection('^TWII')
{ "ok" : 1 }
> db.getCollection('^TWII').drop()
true

0

MongoDBにはいくつかの命名規則があります。それらの1つは、データベース名で大文字と小文字が区別されないことです。また、mongoは、指定されていない場合、コレクション名を複数形にします。「コース」は「コース」になります。

MongoDBではデータベース名で大文字と小文字が区別されないため、データベース名は文字の大文字と小文字だけで異なることはできません。

それらのために、すべてのコレクションに小文字で特殊文字なしで名前を付けるようにしてください。特にMongooseを使用している場合は、多くのエラーを回避できます。マングースには、いくつかの奇妙なクエリの特異性があります。

たとえば、「courses」という名前のコレクションがある場合、モデルを構造化する方法は次のとおりです。

const LawModel = mongoose.model(
  "course",
  new mongoose.Schema({
    id: String,
    name: String,

  }),

「コース」がどのように特異であるかに注意してください。マングースは複数形になるため、空の配列「[]」が表示される場合があります。->存在しないコレクションをクエリしています。

モデルの名前を変更して調整してみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.