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

5 måder at indsætte dokumenter i MongoDB

MongoDB giver mange måder at indsætte dokumenter i en samling.

Her er 5 måder at indsætte dokumenter i en samling, når du bruger mongo-skallen.

insertOne() Metode

insertOne() metode indsætter et enkelt dokument i en samling.

Dens fulde navn er db.collection.insertOne() , hvor collection er navnet på den samling, dokumentet skal indsættes i.

Her er et eksempel på indsættelse af et dokument i en samling kaldet pets :

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

Resultat:

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

db.collection.insertOne() metode returnerer et dokument, der indeholder:

  • En boolesk acknowledged som true hvis operationen kørte med skrivebekymring eller false hvis skriveproblemer var deaktiveret.
  • Et felt insertedId med _id værdien af ​​det indsatte dokument.

insertMany() Metode

insertMany() metode ligner insertOne() , bortset fra at den indsætter flere dokumenter i en samling.

Også på samme måde som insertOne() , dens fulde navn er db.collection.insertMany() , hvor collection er navnet på den samling, dokumentet skal indsættes i. Dette gælder for alle metoder, der er angivet i denne artikel.

Her er et eksempel på brug af db.collection.insertMany() at indsætte flere dokumenter i en samling kaldet pets :

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

Resultat:

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

db.collection.insertMany() metode returnerer et dokument, der indeholder:

  • En boolesk acknowledged som true hvis operationen kørte med skrivebekymring eller false hvis skriveproblemer var deaktiveret.
  • En matrix af _id værdier for hvert vellykket indsat dokument.

insert() Metode

insert() metode er som en kombination af insertOne() og insertMany() . Det giver dig mulighed for at indsætte enten et enkelt dokument eller flere dokumenter i en samling.

Her er et eksempel på brug af db.collection.insert() for at indsætte et enkelt dokument:

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

Resultat:

WriteResult({ "nInserted" : 1 })

Når et enkelt dokument indsættes, db.collection.insert() returnerer et WriteResult objekt. Når et array af dokumenter indsættes, returnerer det et BulkWriteResult objekt.

Her er et eksempel på brug af db.collection.insert() for at indsætte flere dokumenter.

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

Resultat:

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

Som nævnt er et BulkWriteResult objekt returneres, når der indsættes en række dokumenter.

bulkWrite() Metode

bulkWrite() metode giver dig mulighed for at udføre bulk-skrivehandlinger.

Faktisk insertMany() udfører allerede masseindsættelsesoperationer. Det samme med insert() når du indsætter en række dokumenter. Men bulkWrite() giver dig mulighed for at udføre masseindsættelse, opdatering og fjernelse, alt sammen fra et enkelt metodekald.

Eksempel:

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
    } }
])

Resultat:

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

I dette tilfælde eksisterede samlingen faktisk ikke (jeg droppede den efter det forrige eksempel), og derfor er de eneste dokumenter nu i samlingen dem, der er angivet i dette eksempel.

Lad os tage et kig på samlingen.

db.pets.find()

Resultat:

{ "_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 }

Som forventet blev alle fire dokumenter indsat.

The Upsert Operation

Dette bringer os til vores femte metode til at indsætte dokumenter i en samling i MongoDB – upsert-operationen.

Dette er mere en betinget metode til at indsætte dokumenter. En upsert er en mulighed, som du kan bruge til opdateringshandlinger. Den indsætter kun et nyt dokument, hvis det angivne dokument ikke allerede eksisterer. Hvis det eksisterer, opdateres det originale dokument (og der er ikke indsat noget dokument).

Vi har allerede set eksempler på upserts. I det forrige eksempel specificerede vi "upsert" : true når du udfører updateOne og replaceOne operationer. Det resulterede i, at to dokumenter blev indsat, fordi samlingen ikke indeholdt dokumenter, der matchede deres filterkriterier.

Her er endnu et eksempel på en upsert. Denne gang bruger vi det på updateOne() metode.

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

Resultat:

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

Her ville vi indstille alle kæledyr kaldet Harry til at være en hamster. Men der var ingen kæledyr, der hed Harry, så en upsert blev udført.

Følgende metoder accepterer upsert parameter:

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

Derfor, når upsert: true er angivet, vil disse metoder udføre en upsert-handling, når de forsøger at opdatere et ikke-eksisterende dokument.


  1. Hvordan finder man sæt skæringspunkter mellem dokumenterne i en enkelt samling i MongoDB?

  2. En guide til MongoDB-implementering og vedligeholdelse ved hjælp af Puppet:Del 2

  3. Hvordan udløber redis nøgler?

  4. Hvordan gemmer man sorteret sæt objekter i redis?