Ce face db.createCollection()
De obicei MongoDB creează colecția automat la primul insertOne. db.createCollection() e necesar când vrei opțiuni speciale de la început: reguli de validare a documentelor, o colecție capped (de dimensiune fixă, care suprascrie cele mai vechi documente) sau o colecție time series pentru măsurători.
Validarea cu $jsonSchema (MongoDB 3.6+) respinge documentele care nu respectă schema: câmpuri obligatorii, tipuri, valori minime. validationAction: 'warn' doar scrie un avertisment în jurnal, în loc să respingă documentul.
Parametri
| Parametru | Descriere |
|---|---|
validator |
Regulile documentelor, de obicei { $jsonSchema: { ... } }. |
validationLevel |
'strict' (implicit) sau 'moderate' (doar documentele deja valide sunt verificate la update). |
validationAction |
'error' (implicit) respinge, 'warn' doar înregistrează. |
capped, size, max |
Colecție de dimensiune fixă: size în octeți, max documente. |
timeseries |
Colecție time series (MongoDB 5.0+): { timeField, metaField, granularity }. |
Ce returnează
{ ok: 1 } la succes; eroare NamespaceExists dacă colecția există deja.
Exemple
Exemplul 1: Colecție cu validare de schemă
Fiecare comandă trebuie să aibă client (text) și total (număr, minim 0).
db.createCollection('comenzi', {
validator: {
$jsonSchema: {
bsonType: 'object',
required: ['client', 'total'],
properties: {
client: { bsonType: 'string' },
total: { bsonType: 'number', minimum: 0 }
}
}
}
})
Ieșire în mongosh
{ ok: 1 }
Exemplul 2: Un document fără câmpul obligatoriu este respins
Lipsește total, așa că serverul refuză inserarea și explică ce regulă nu a fost respectată.
db.comenzi.insertOne({ client: 'Ana' })
Ieșire în mongosh
MongoServerError: Document failed validation
Additional information: {
failingDocumentId: ObjectId('6addcc18f1a2b3c4d5e6f702'),
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'required',
specifiedAs: { required: [ 'client', 'total' ] },
missingProperties: [ 'total' ]
}
]
}
}
Exemplul 3: Colecție capped pentru jurnale
Colecția ține maximum 5 MB sau 10 000 de documente; cele mai vechi sunt înlocuite automat.
db.createCollection('jurnal', { capped: true, size: 5242880, max: 10000 })
Ieșire în mongosh
{ ok: 1 }
Greșeli frecvente
- A doua creare a aceleiași colecții dă
MongoServerError[NamespaceExists]. În scripturi de instalare, verifică întâi cudb.getCollectionNames(). - Validarea se aplică doar documentelor scrise după ce ai pus regula; cele vechi rămân cum erau. Pentru o colecție existentă, regulile se schimbă cu comanda
collMod. bsonType: 'number'acceptă int, long, double și decimal;'int'ar respinge 120.5.
Comenzi înrudite
show dbs / use: În mongosh, show dbs listează bazele de date, use schimbă baza curentă, iar show collections arată colecțiile ei.drop() / dropDatabase(): drop() șterge definitiv o colecție cu documentele și indexurile ei; dropDatabase() șterge toată baza curentă.Index TTL (expireAfterSeconds): Un index TTL șterge automat documentele după un număr de secunde de la data dintr-un câmp; ideal pentru sesiuni și jurnale.$type: Operatorul $type găsește documentele în care un câmp are un anumit tip BSON: string, number, date, null, array etc.