Me gustaría saber si existe una convención para las colecciones de bases de datos como:
PageVisit
o page_visit
.
¿Existen ventajas / desventajas para estas notaciones?
Respuestas:
Las convenciones generales son:
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.
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.
:
válidos para nombres de colecciones de espacios de nombres, como en foo:bar
?
db["\n"].insert({});
, sin error. Las cosas a considerar son principalmente la conveniencia con el controlador que está utilizando.
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
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.