db.createCollection() în MongoDB & NoSQL

Creează explicit o colecție, cu opțiuni: validare cu $jsonSchema, colecție capped, time series sau colație.

Sintaxă
db.createCollection(nume, { validator, validationLevel, validationAction, capped, size, max, timeseries, expireAfterSeconds, collation })

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 cu db.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.