Я хотів би знати, чи існує конвенція для колекцій баз даних, таких як:
PageVisit
або page_visit
.
Чи є у цих позначень переваги / недоліки?
Відповіді:
Загальними умовами є:
Приклади:
users
pagevisits
users.pagevisits
Конвенції про назви полів (повинні) слідувати одній і тій же логіці, хоча оболонка верблюда є досить поширеною.
Просто уникайте використання дефісів у назвах колекцій.
І це лише тому, що, якщо ви використовуєте cli двох викликів нижче, перший недійсний JavaScript:
db.foo-bar.find();
db['foo-bar'].find();
Вони обидва функціонально однакові, але другий трохи дратує друк і не заповнює вкладку.
Крім того, переваги / недоліки залежать від використання вами колекцій. Бути послідовним важливіше того, яку конвенцію ви вибрали.
:
дійсні для назв колекцій простору імен, як у foo:bar
?
db["\n"].insert({});
- помилки немає. Слід врахувати переважно зручність драйвера, яким ви користуєтесь.
У http://docs.mongodb.org/manual/reference/limits/ в посібнику зазначено, що імена колекцій повинні починатися з підкреслення ('_') або символу літери, і не може:
- містять $.
- бути порожнім рядком (наприклад, "").
- містять нульовий символ.
- Почніть із системи. префікс. (Зарезервовано для внутрішнього використання.)
Однак, якщо ви дотримуєтесь правила і створюєте колекцію з початковою літерою "_", наприклад "_TWII", у вас виникне проблема, коли ви захочете скинути колекцію. Дивіться тест нижче та спосіб його виправлення. Колекція "_TWII" була створена в розділі "люди" db.
> 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
>
Швидкий шлях до видалення колекції _TWII, перебуваючи в розділі "people" db:
> db.createCollection('^TWII')
{ "ok" : 1 }
> db.getCollection('^TWII').drop()
true
MongoDB має деякі правила іменування. Один з них полягає в тому, що ім’я бази даних не враховує регістр. Крім того, mongo буде множиною назви вашої колекції, якщо не вказано. "курс" стане "курсом".
Оскільки в MongoDB імена баз даних не чутливі до регістру, імена баз даних не можуть відрізнятися лише за регістром символів.
Через них намагайтеся називати всю свою колекцію малими літерами та без спеціальних символів. Ви уникнете великої кількості помилок, особливо якщо ви використовуєте Mongoose. Mongoose має деякі дивні особливості запитів.
Наприклад, якщо у вас є колекція з назвою "курси", ось як вам потрібно структурувати свою модель:
const LawModel = mongoose.model(
"course",
new mongoose.Schema({
id: String,
name: String,
}),
Зверніть увагу, як "курс" є єдиним числом? Mongoose буде множиною, тому ви можете побачити порожній масив "[]". -> ви запитуєте неіснуючу колекцію.
Спробуйте перейменувати та відкоригувати свою модель.