Chciałbym wiedzieć, czy istnieje konwencja dotycząca zbiorów baz danych, takich jak:
PageVisit
lub page_visit
.
Czy są jakieś wady / zalety tych zapisów?
Odpowiedzi:
Ogólne konwencje to:
Przykłady:
users
pagevisits
users.pagevisits
Konwencje nazewnictwa pól (powinny) być zgodne z tą samą logiką, chociaż są one dość powszechne.
Po prostu unikaj używania łączników w nazwach kolekcji.
Dzieje się tak tylko dlatego, że jeśli użyjesz kliknięcia z dwóch poniższych wywołań, pierwsze to nieprawidłowy JavaScript:
db.foo-bar.find();
db['foo-bar'].find();
Oba są funkcjonalnie identyczne, ale drugi jest nieco bardziej irytujący w pisaniu i nie uzupełnia tabulatorów.
Poza tym zalety / wady zależą od tego, jak korzystasz z kolekcji. Konsekwencja jest ważniejsza niż konwencja, którą wybierzesz.
:
poprawne są nazwy kolekcji w przestrzeni nazw, jak w foo:bar
?
db["\n"].insert({});
- brak błędu. Kwestie, które należy wziąć pod uwagę, to głównie wygoda ze sterownikiem, z którego korzystasz.
Na stronie http://docs.mongodb.org/manual/reference/limits/ podano, że nazwy kolekcji powinny zaczynać się od podkreślenia („_”) lub litery i nie mogą:
- zawierać $.
- być pustym ciągiem znaków (np. „”).
- zawierać znak null.
- zacznij od systemu. prefiks. (Zarezerwowane do użytku wewnętrznego.)
Jeśli jednak zastosujesz się do tej reguły i utworzysz kolekcję z „_” jako literą początkową, na przykład „_TWII”, napotkasz kłopoty, gdy będziesz chciał usunąć kolekcję. Zobacz poniższy test i zobacz, jak to naprawić. Kolekcja „_TWII” została utworzona pod bazą „people”.
> 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
>
Skrót do usuwania kolekcji _TWII z bazy danych „people”:
> db.createCollection('^TWII')
{ "ok" : 1 }
> db.getCollection('^TWII').drop()
true
MongoDB ma pewne konwencje nazewnictwa. Jedną z nich jest to, że w nazwach baz danych wielkość liter nie ma znaczenia. Ponadto mongo użyje liczby mnogiej nazwy kolekcji, jeśli nie zostanie określona. „kurs” stanie się „kursami”.
Ponieważ w nazwach baz danych w MongoDB nie jest rozróżniana wielkość liter, nazwy baz danych nie mogą różnić się tylko wielkością znaków.
Z ich powodu spróbuj nazwać całą swoją kolekcję małymi literami i bez znaków specjalnych. Unikniesz wielu błędów - zwłaszcza jeśli używasz Mongoose. Mongoose ma dziwną specyfikę zapytań.
Na przykład, jeśli masz kolekcję o nazwie „kursy”, oto jak musisz uporządkować swój model:
const LawModel = mongoose.model(
"course",
new mongoose.Schema({
id: String,
name: String,
}),
Zauważ, że „kurs” jest liczbą pojedynczą? Mongoose użyje liczby mnogiej, dlatego możesz zobaczyć pustą tablicę „[]”. -> pytasz o nieistniejącą kolekcję.
Spróbuj zmienić nazwę i dostosować model.