MongoDBの命名規則は何ですか?


188

データベース、コレクション、フィールド名など、MongoDBエンティティの推奨される命名規則のセットはありますか?

私はこれらの線に沿って考えていました:

  • データベース:目的(単数形の単語)で構成され、「db」で終わる–すべて小文字:imagedb、resumedb、memberdbなど。
  • コレクション:小文字の複数形:画像、履歴書、
  • ドキュメントフィールド:lowerCamelCase、たとえば、memberFirstName、fileNameなど

回答:


128
  1. 簡潔にまとめる:小さなオブジェクトのストレージの最適化SERVER-863。ばかげているが本当だ。

  2. ここでは、関係データベースに適用されるのとほぼ同じ規則を適用する必要があると思います。そして何十年経っても、RDBMSテーブルの名前を単数形にするか複数形にするかはまだ合意されていません...

  3. MongoDBはJavaScriptを話すため、キャメルケースのJS命名規則を利用します。

  4. MongoDBの公式ドキュメントでは、アンダースコアを使用できると記載されており、組み込みの識別子も指定されています_id(ただし、これは_id、プライベート、内部、表示、編集を意図したものではない可能性があります。


95
3と4は少し矛盾しています-JSはキャメルケースを好み、モンゴはアンダースコアを好むようです...しかし、疑わしい場合はアンダースコアを選んでください。ラテン文字以外のアルファベットに慣れている方に感謝いたします。
Matt Zukowski、2011

1
複数の議論対単一のため、この質問を参照してください:stackoverflow.com/questions/338156/...
ジェイソン

4
「JSはキャメルケースを好む」と言えるかわかりません。JS自体には好みはありませんが、ほとんどの JSプログラマーはキャメルケースを使用する傾向があると言って間違いありません。
treeface

1
@treeface私はマットがJSの組み込みメソッドがすべてノードとブラウザの両方でcamelCaseを使用するという事実を参照していたと思います
Luke Taylor

1
組み込み識別子に_idは、通常、キーが内部/秘密キーであることを示す一般的なJavaScript規則に従うように、アンダースコアが前に付いています。つまり、は_id編集したり、コレクションのデータを表示するユーザーに提示したりすることを意図したものではありません。
ボー・スミス

58

データベース

  • キャメルケース
  • 名前の最後にDBを追加
  • 単数にする(コレクションは複数)

MongoDBは良い例を述べています:

使用するデータベースを選択するには、mongoシェルで、次の例のように、use <db>ステートメントを発行します。

myDBを使用するmyNewDBを
使用する

コンテンツ:https : //docs.mongodb.com/manual/core/databases-and-collections/#databases

コレクション

  • 小文字の名前:大文字と小文字の区別の問題を回避し、MongoDBコレクション名は大文字と小文字を区別します。

  • 複数形:何かのコレクションに複数形のラベルを付けるほうがわかりやすい。たとえば、「ファイル」ではなく「ファイル」

  • >単語の区切り文字なし:異なる人が(誤って)単語を区切る問題を回避します(ユーザー名<->ユーザー名、最初の名前<->名
    )。これは、この
    周りの数人の人々によると議論の余地がありますが、引数がコレクション名に分離されているとすれば、そうすべきではないと思います;)
    アンダースコアまたは
    キャメルを追加してコレクション名の可読性を向上させる場合名前が長すぎるか
    、コレクションの
    分類の標準である適切な期間を使用する必要があります。

  • より詳細なコレクションのドット表記:コレクションがどのように関連しているかを示します。たとえば、「users」を削除した場合、スキーマを設計した人がうまく機能していれば、「users.pagevisits」も削除できると合理的に確信できます。

内容:http : //www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

コレクションについては、MongoDBの公式ドキュメントが見つかるまで、これらの推奨パターンに従っています。


25

これに関する規則が指定されていない場合でも、1対1の関係の場合、Mongoのドキュメントで参照されているコレクションにちなんで、手動参照は一貫して命名されます。名前は常に構造に従います<document>_id

たとえば、dogsコレクションでは、ドキュメントには次のような名前の外部ドキュメントへの手動参照があります。

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

これは、_idすべてのドキュメントの識別子に名前を付けるというモンゴの規則に従います。


1
私は私の答えでcamelCaseに言及しなかったので、私は使用しますowner_id
danza

8

コレクションの命名規則

コレクションに名前を付けるには、いくつかの注意事項があります。

  1. 空の文字列( "")を含むコレクションは、有効なコレクション名ではありません。
  2. これはコレクション名の終わりを定義するため、コレクション名にnull文字を含めることはできません。
  3. コレクション名の先頭に「system」を使用しないでください。これは内部コレクション用に予約されているためです。
  4. データベースで使用可能なさまざまなドライバーはコレクション名で「$」をサポートしていないため、コレクション名に文字「$」を含めない方が良いでしょう。

    データベース名を作成する際の注意事項は次のとおりです。

  5. 空の文字列(“”)を含むデータベースは、有効なデータベース名ではありません。
  6. データベース名は64バイトを超えることはできません。
  7. データベース名は、大文字と小文字が区別されないファイルシステムでも、大文字と小文字が区別されます。したがって、名前を小文字にしておくことをお勧めします。
  8. データベース名にこれらの文字「/、\、.、“、*、<、>、:、|、?、$、」を含めることはできません。また、単一のスペースやヌル文字を含めることもできません。

詳細については。以下のリンクを確認してください:http : //www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html


3

個人的な好みだと思います。私の好みは、SQL Serverで.NETのNHibernateを使用することから来ているため、おそらく他の人が使用するものとは異なります。

  • データベース:使用されているアプリケーション。例:Stackoverflow
  • コレクション:名前に単数形、コレクションになるもの、例:質問
  • ドキュメントフィールド、例:MemberFirstName

正直なところ、プロジェクトで一貫している限り、それほど問題ではありません。仕事に取り掛かって、細かいことまで気にしないでください:P


1
結果をもたらす可能性があるのは、各ドキュメント内に格納されるため、ドキュメントフィールドだと思います。Tomaszが指摘したように、それらを短くしておくと、スペース/帯域幅を節約できます。でも、わかりやすいものを使う方が大事だと思います。
レックスモーガン、

2

SERVER-863が取得されるまで、特に多くのレコードがある場合は、フィールド名をできるだけ短くすることをお勧めします。

ユースケースによっては、フィールド名がストレージに大きな影響を与える可能性があります。これはすべてのユーザーにプラスの影響を与えるため、これがMongoDbの優先度が高くない理由を理解できません。他に何もない場合は、帯域幅とストレージのコストについて2度考えなくても、フィールド名をより説明的にすることができます。

投票してください。


この答えの潜在的な将来の読者を更新するためだけに、MongoDBは最近圧縮を行うので、長いフィールド名は実際にはもう問題ではありません。
ウブロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.