MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

5 modi per inserire documenti in MongoDB

MongoDB offre molti modi per inserire documenti in una raccolta.

Ecco 5 modi per inserire documenti in una raccolta quando si utilizza la shell mongo.

Il insertOne() Metodo

Il insertOne() inserisce un singolo documento in una raccolta.

Il suo nome completo è db.collection.insertOne() , dove collection è il nome della raccolta in cui inserire il documento.

Ecco un esempio di inserimento di un documento in una raccolta denominata pets :

db.pets.insertOne( { 
    name: "Scratch", 
    type: "Cat" 
    } )

Risultato:

{
	"acknowledged" : true,
	"insertedId" : ObjectId("5fe2d15637b49e0faf1af214")
}

Il db.collection.insertOne() restituisce un documento contenente:

  • Un acknowledged booleano come true se l'operazione è stata eseguita con problemi di scrittura o false se il problema di scrittura è stato disabilitato.
  • Un campo insertedId con il _id valore del documento inserito.

Il insertMany() Metodo

Il insertMany() il metodo è simile a insertOne() , tranne per il fatto che inserisce più documenti in una raccolta.

Anche in modo simile a insertOne() , il suo nome completo è db.collection.insertMany() , dove collection è il nome della raccolta in cui inserire il documento. Questo vale per tutti i metodi elencati in questo articolo.

Ecco un esempio di utilizzo di db.collection.insertMany() per inserire più documenti in una raccolta denominata pets :

db.pets.insertMany([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ])

Risultato:

{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] } 

Il db.collection.insertMany() restituisce un documento contenente:

  • Un acknowledged booleano come true se l'operazione è stata eseguita con problemi di scrittura o false se il problema di scrittura è stato disabilitato.
  • Un array di _id valori per ogni documento inserito correttamente.

Il insert() Metodo

Il insert() il metodo è come una combinazione di insertOne() e insertMany() . Ti consente di inserire un singolo documento o più documenti in una raccolta.

Ecco un esempio di utilizzo di db.collection.insert() per inserire un unico documento:

db.pets.insert(
    { name: "Bruce", type: "Bat" }
    )

Risultato:

WriteResult({ "nInserted" : 1 })

Quando viene inserito un singolo documento, db.collection.insert() restituisce un WriteResult oggetto. Quando viene inserita una matrice di documenti, restituisce un BulkWriteResult oggetto.

Ecco un esempio di utilizzo di db.collection.insert() per inserire più documenti.

db.pets.insert([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ])

Risultato:

BulkWriteResult({
	"writeErrors" : [ ],
	"writeConcernErrors" : [ ],
	"nInserted" : 3,
	"nUpserted" : 0,
	"nMatched" : 0,
	"nModified" : 0,
	"nRemoved" : 0,
	"upserted" : [ ]
})

Come accennato, un BulkWriteResult l'oggetto viene restituito quando si inserisce una matrice di documenti.

Il bulkWrite() Metodo

Il bulkWrite() consente di eseguire operazioni di scrittura in blocco.

In realtà, insertMany() esegue già operazioni di inserimento in blocco. Lo stesso con insert() quando si inserisce una matrice di documenti. Ma bulkWrite() ti consente di eseguire operazioni di inserimento, aggiornamento e rimozione in blocco, il tutto da un'unica chiamata al metodo.

Esempio:

db.pets.bulkWrite([
    { insertOne: { "document": { "_id": 1, "name": "Bubbles", "type": "Fish" }}},
    { insertOne: { "document": { "_id": 2, "name": "Wag", "type": "Dog" }}},
    { updateOne : {
        "filter" : { "_id" : 3 },
        "update" : { $set : { "name" : "Fluffy", "type" : "Cat" } },
        "upsert" : true
    } },
    { replaceOne : {
        "filter" : { "_id" : 4 },
        "replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 },
        "upsert" : true
    } }
])

Risultato:

{
	"acknowledged" : true,
	"deletedCount" : 0,
	"insertedCount" : 2,
	"matchedCount" : 0,
	"upsertedCount" : 2,
	"insertedIds" : {
		"0" : 1,
		"1" : 2
	},
	"upsertedIds" : {
		"2" : 3,
		"3" : 4
	}
}

In questo caso, la raccolta in realtà non esisteva (l'ho abbandonata seguendo l'esempio precedente), quindi gli unici documenti ora all'interno della raccolta sono quelli specificati in questo esempio.

Diamo un'occhiata alla collezione.

db.pets.find()

Risultato:

{ "_id" : 1, "name" : "Bubbles", "type" : "Fish" }
{ "_id" : 2, "name" : "Wag", "type" : "Dog" }
{ "_id" : 3, "name" : "Fluffy", "type" : "Cat" }
{ "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 }

Come previsto, sono stati inseriti tutti e quattro i documenti.

L'operazione Upsert

Questo ci porta al nostro quinto metodo per inserire documenti in una raccolta in MongoDB:l'operazione di upsert.

Questo è più un metodo condizionale per l'inserimento di documenti. Un upsert è un'opzione che puoi utilizzare nelle operazioni di aggiornamento. Inserisce un nuovo documento solo se il documento specificato non esiste già. Se esiste, il documento originale viene aggiornato (e non viene inserito alcun documento).

Abbiamo già visto esempi di upsert. Nell'esempio precedente, abbiamo specificato "upsert" : true durante l'esecuzione di updateOne e replaceOne operazioni. Ciò ha comportato l'inserimento di due documenti, poiché la raccolta non conteneva documenti corrispondenti ai criteri di filtro.

Ecco un altro esempio di upsert. Questa volta lo useremo su updateOne() metodo.

db.pets.updateOne( 
    { name: "Harry" },
    { $set: { type: "Hamster" } },
    { upsert: true }
    )

Risultato:

{
	"acknowledged" : true,
	"matchedCount" : 0,
	"modifiedCount" : 0,
	"upsertedId" : ObjectId("5fe3dc44d991410169410524")
}

Qui, volevamo impostare tutti gli animali domestici chiamati Harry come criceti. Ma non c'erano animali chiamati harry, quindi è stato eseguito un upsert.

I seguenti metodi accettano il upsert parametro:

  • update()
  • updateOne()
  • updateMany()
  • findAndModify()
  • findOneAndUpdate()
  • findOneAndReplace()

Pertanto, quando upsert: true è specificato, questi metodi eseguiranno un'operazione di upsert quando tenteranno di aggiornare un documento inesistente.