Gibt es eine Konvention zur Benennung von Sammlungen in MongoDB?

Antworten:

84

Die allgemeinen Konventionen sind:

  • Kleinbuchstaben : Dadurch werden Probleme mit der Groß- und Kleinschreibung vermieden, da bei MongoDB-Sammlungsnamen zwischen Groß- und Kleinschreibung unterschieden wird .
  • Plural : Es ist offensichtlicher, eine Sammlung von etwas als Plural zu bezeichnen, z. B. "Dateien" statt "Datei".
  • Keine Worttrennzeichen : Vermeidet Probleme, bei denen verschiedene Personen (falsch) Wörter trennen (Benutzername <-> Benutzername, Vorname <-> Vorname). Dieser steht einigen Leuten hier zur Debatte, aber vorausgesetzt, das Argument ist auf Sammlungsnamen beschränkt, denke ich nicht, dass es so sein sollte;) Wenn Sie feststellen, dass Sie die Lesbarkeit Ihres Sammlungsnamens verbessern, indem Sie Unterstriche hinzufügen oder camelCasing your Der Name der Sammlung ist wahrscheinlich zu lang oder sollte gegebenenfalls Punkte verwenden, was der Standard für die Kategorisierung der Sammlung ist.
  • Punktnotation für Sammlungen mit höheren Details : Gibt einen Hinweis darauf, wie Sammlungen zusammenhängen. Zum Beispiel können Sie ziemlich sicher sein, dass Sie "users.pagevisits" löschen können, wenn Sie "users" löschen, vorausgesetzt, die Personen, die das Schema entworfen haben, haben gute Arbeit geleistet;)

Beispiele:

users
pagevisits
users.pagevisits

Feldnamenkonventionen (sollten) folgen der gleichen Logik, obwohl Kamelhüllen ziemlich häufig sind.

Remon van Vliet
quelle
32
Ich werde mit Ihnen in Bezug auf die ganze Sache "Keine Worttrennzeichen" nicht einverstanden sein müssen, besonders wenn Sie MongoDB mit Python verwenden. Unterstriche anstelle von Leerzeichen sind gut lesbar, was eine der wünschenswertesten Eigenschaften von Code, Schema und dergleichen ist.
Noah McIlraith
2
Subjektivität ist eine schöne Sache;) Wenn Sie Feld- oder Sammlungsnamen mit so vielen Wörtern finden, dass die Lesbarkeit des Codes verbessert wird, sollten Sie den Namen wahrscheinlich wirklich als Ganzes überdenken. Jedem natürlich sein eigenes. Ich finde das Problem möglicher Inkonsistenzen bei der Trennung von Wörtern ein viel größeres Problem. Das Nicht-Verwenden von Worttrennern ist relativ sprachunabhängig. Wo Sie Unterstriche bevorzugen, würde ein Java-Entwickler wahrscheinlich Camelcasing bevorzugen, und das wird in Eile chaotisch.
Remon van Vliet
7
Singular statt Plural, sonst wird es Objekten wie Pojos im Plural zugeordnet, und Sie erhalten eine Benutzerklasse! eher als eine Benutzerklasse
Ricardoespsanto
4
@ Ricky Ich nehme an. Die Antwort, auf die Sie sich beziehen, ist, die gleichen Konzepte zu verwechseln, die hier verwechselt werden. Benennen der Entität im Vergleich zum Benennen der Sammlung. Niemand würde "Kunden" als Entitätsnamen verwenden, wie der Autor dieser Antwort vorschlägt, obwohl er möglicherweise KUNDEN als SQL-Tabellennamen verwendet. Wie Sie sagen, ist es eine äußerst subjektive Diskussion. Solange es über eine gesamte Codebasis konsistent ist, sollte es kein allzu großes Problem geben.
Remon van Vliet
3
Ich denke, Singular macht mehr Sinn, weil der Plural impliziert ist. Und wie @Ricky sagt, wurde dieser Standard vor langer Zeit in SQL etabliert. stackoverflow.com/questions/338156
Steampowered
32

Vermeiden Sie einfach die Verwendung von Bindestrichen in Ihren Sammlungsnamen.

Und das nur, weil, wenn Sie die CLI der beiden folgenden Aufrufe verwenden, das erste ungültiges JavaScript ist:

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

Sie sind beide funktional identisch, aber die zweite ist etwas nerviger zu tippen und nicht vollständig.

Abgesehen davon hängen die Vor- und Nachteile von Ihrer Nutzung der Sammlungen ab. Konsequent zu sein ist wichtiger als die von Ihnen gewählte Konvention.

AD7six
quelle
Sind :für Namespace-Sammlungsnamen wie in gültig foo:bar?
Raffian
Alles ist gültig für Mongo. zB db["\n"].insert({});- kein Fehler. Die Dinge, die zu beachten sind, sind meistens Bequemlichkeit mit dem Treiber, den Sie verwenden.
AD7six
1
Dies hat sich in 2.2 unter Windows geändert: / \. „* <>: | Nicht mehr gültig sind - sehen? Docs.mongodb.org/manual/release-notes/2.2/...
toong
5
@toong, das ist für Datenbanknamen , nicht für Sammlungen.
BorisOkunskiy
19

In http://docs.mongodb.org/manual/reference/limits/ heißt es im Handbuch, dass die Sammlungsnamen mit einem Unterstrich ('_') oder einem Buchstaben beginnen sollten und nicht:

  • enthalten die $.
  • sei eine leere Zeichenkette (zB "").
  • enthalten das Nullzeichen.
  • Beginnen Sie mit dem System. Präfix. (Reserviert für den internen Gebrauch.)

Wenn Sie jedoch der Regel folgen und eine Sammlung mit '_' als Anfangsbuchstaben erstellen, z. B. "_TWII", treten Probleme auf, wenn Sie die Sammlung löschen möchten. Sehen Sie sich den Test unten an und wie Sie ihn beheben können. Die Sammlung '_TWII' wurde unter 'people' db erstellt.

> 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
> 

Eine Verknüpfung zum Löschen der _TWII-Sammlung unter 'people' db:

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