¿Existe una convención para nombrar la colección en MongoDB?

Respuestas:

85

Las convenciones generales son:

  • Nombres en minúsculas : esto evita problemas de distinción entre mayúsculas y minúsculas, ya que los nombres de las colecciones de MongoDB distinguen entre mayúsculas y minúsculas .
  • Plural : más obvio etiquetar una colección de algo como plural, por ejemplo, "archivos" en lugar de "archivo".
  • Sin separadores de palabras : evita problemas en los que diferentes personas (incorrectamente) separan palabras (nombre de usuario <-> nombre de usuario, nombre de usuario <-> nombre de usuario). Este es objeto de debate según algunas personas por aquí, pero siempre que el argumento esté aislado en los nombres de las colecciones, no creo que deba serlo;) Si se encuentra mejorando la legibilidad del nombre de su colección agregando guiones bajos o camelCasing su El nombre de la colección probablemente sea demasiado largo o debería usar períodos según corresponda, que es el estándar para la categorización de la colección.
  • Notación de puntos para colecciones de mayor detalle : da alguna indicación de cómo se relacionan las colecciones. Por ejemplo, puede estar razonablemente seguro de que podría eliminar "users.pagevisits" si eliminó "users", siempre que las personas que diseñaron el esquema hayan hecho un buen trabajo;)

Ejemplos:

users
pagevisits
users.pagevisits

Las convenciones de nombres de campo (deberían) seguir algo de la misma lógica, aunque el uso de mayúsculas y minúsculas es bastante común.

Remon van Vliet
fuente
32
Voy a tener que estar en desacuerdo con usted por todo el asunto de "sin separadores de palabras", especialmente si está usando MongoDB con Python. Los guiones bajos en lugar de los espacios son altamente legibles, que es una de las cualidades más deseables del código, esquema y similares.
Noah McIlraith
2
La subjetividad es algo hermoso;) Si te encuentras con nombres de campos o colecciones con tantas palabras que los subrayados mejoran la legibilidad del código, probablemente deberías reconsiderar el nombre como un todo. A cada uno lo suyo, por supuesto. Considero que la cuestión de las posibles inconsistencias en las palabras que se separan es un problema mucho mayor. No usar separadores de palabras es relativamente independiente del idioma. Donde usted prefiere subrayados, un desarrollador de Java probablemente preferiría usar camelcasing y eso se vuelve complicado de prisa.
Remon van Vliet
7
Singular en lugar de plural, de lo contrario, se asigna a objetos como Pojos en plural y terminas con una clase de usuarios. en lugar de una clase de usuario
ricardoespsanto
4
@Ricky Supongo que lo es. Sin embargo, la respuesta a la que se refiere es mezclar los mismos conceptos que se mezclan aquí. Nombrar la entidad versus nombrar la colección. Nadie usaría "Clientes" como el nombre de la entidad como sugiere el autor de esa respuesta, aunque podrían usar CLIENTES como el nombre de la tabla SQL. Como dices, es una discusión extremadamente subjetiva. Siempre que sea coherente en todo el código base, no debería haber demasiados problemas.
Remon van Vliet
3
Creo que el singular tiene más sentido, porque el plural está implícito. Y como dice @Ricky, este estándar se estableció en sql hace mucho tiempo. stackoverflow.com/questions/338156
Steampowered
32

Simplemente evite usar guiones en los nombres de sus colecciones.

Y eso es solo porque, si usa el cli de las dos llamadas siguientes, la primera es JavaScript no válido:

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

Ambos son funcionalmente idénticos, pero el segundo es un poco más molesto de escribir y no se completa con la pestaña.

Aparte de eso, las ventajas / desventajas dependen del uso que haga de las colecciones. Ser coherente es más importante que la convención que elija.

AD7six
fuente
¿Son :válidos para nombres de colecciones de espacios de nombres, como en foo:bar?
raffian
cualquier cosa es válida para mongo. por ejemplo db["\n"].insert({});, sin error. Las cosas a considerar son principalmente la conveniencia con el controlador que está utilizando.
AD7six
1
Esto cambió en 2.2 en Windows: / \. "* <>: | Ya no son válidos - ver? Docs.mongodb.org/manual/release-notes/2.2/...
Toong
5
@toong, eso es para nombres de bases de datos , no colecciones.
BorisOkunskiy
19

En http://docs.mongodb.org/manual/reference/limits/ , el manual establece que los nombres de las colecciones deben comenzar con un guión bajo ('_') o un carácter de letra, y no pueden:

  • contienen el $.
  • ser una cadena vacía (por ejemplo, "").
  • contienen el carácter nulo.
  • comience con el sistema. prefijo. (Reservado para uso interno).

Sin embargo, si sigue la regla y crea una colección con '_' como letra inicial, como "_TWII", encontrará problemas cuando quiera eliminar la colección. Vea la prueba a continuación y la forma de solucionarlo. La colección '_TWII' fue creada bajo la base de datos de 'personas'.

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

Un atajo para eliminar la colección _TWII mientras se encuentra en la base de datos de 'personas':

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

MongoDB tiene algunas convenciones de nomenclatura. Uno de ellos es que el nombre de la base de datos no distingue entre mayúsculas y minúsculas. Además, mongo pondrá en plural el nombre de su colección si no se especifica. "curso" se convertirá en "cursos".

Dado que los nombres de las bases de datos no distinguen entre mayúsculas y minúsculas en MongoDB, los nombres de las bases de datos no pueden diferir solo por el caso de los caracteres.

Por ellos, intente nombrar toda su colección en minúsculas y sin caracteres especiales. Evitará muchos errores, especialmente si usa Mongoose. Mongoose tiene algunas peculiaridades de consulta extrañas.

Por ejemplo, si tiene una colección llamada "cursos", así es como debe estructurar su modelo:

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

  }),

¿Observa cómo "curso" es singular? Mongoose lo pondrá en plural, por lo que es posible que vea una matriz vacía "[]". -> está consultando una colección inexistente.

Intente cambiar el nombre y ajustar su modelo.

Dom355
fuente