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

4 måder at opdatere et dokument i MongoDB

MongoDB giver forskellige måder at opdatere et dokument på. Den metode, du bruger, afhænger af præcis, hvordan du vil udføre opdateringen.

Denne artikel præsenterer 4 måder at opdatere et dokument i MongoDB på.

db.collection.updateOne() Metode

db.collection.updateOne() metoden gør præcis, som dens navn lover – den opdaterer ét dokument.

Antag, at vi har en samling kaldet pets der indeholder følgende dokumenter:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Vi kunne opdatere et dokument som dette:

db.pets.updateOne( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Resultat:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Det opdaterede kun ét dokument, selvom to dokumenter matcher filterkriterierne (kriteriet er type: "Dog" ).

Vi kan tjekke resultaterne sådan her:

db.pets.find()

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Det første dokument har nu en type af Cow i stedet for Dog , men det andet dokument var upåvirket, selvom det også matchede filtreringskriterierne.

db.collection.updateMany() Metode

db.collection.updateMany() metode opdaterer alle dokumenter, der matcher det angivne filter for en samling.

Lad os bruge de originale indsamlingsdokumenter:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Endnu en gang kan vi se, at to dokumenter har Dog som deres type .

Vi kan opdatere begge dokumenter på én gang sådan her:

db.pets.updateMany( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Resultat:

{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

Dette viser os, at to dokumenter matchede, og to blev opdateret.

Vi kan tjekke samlingen:

db.pets.find()

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

db.collection.update() Metode

db.collection.update() metode kan opdatere et enkelt dokument eller flere dokumenter i en samling.

Som standard opdaterer den kun et enkelt dokument. Men hvis multi: true er angivet, så opdaterer den alle dokumenter, der matcher forespørgselskriterierne.

Opdater et enkelt dokument

Lad os bruge den originale samling af dokumenter igen:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Vi kunne opdatere et dokument som dette:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Resultat:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kun ét dokument blev opdateret. Dette bekræftes, når vi forespørger på samlingen.

db.pets.find()

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Opdater flere dokumenter

Lad os gå tilbage til den originale samling af dokumenter igen:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Og nu tilføjer vi multi: true til vores opdateringsoperation for at opdatere alle dokumenter, der matcher forespørgselskriterierne:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } },
    { multi: true }
    )

Resultat:

WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) 

Så to dokumenter blev matchet og opdateret denne gang.

Lad os se på vores samling igen:

db.pets.find()

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Som forventet har begge dokumenter nu en type af Cow .

db.collection.replaceOne() Metode

db.collection.replaceOne() metode erstatter et enkelt dokument i samlingen baseret på filteret.

Igen ved at bruge den originale samling:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Lad os se, hvad der sker, når vi bruger db.collection.replaceOne() metode mod det.

db.pets.replaceOne( 
    { type: "Dog" },
    { type: "Cow" }
    )

Resultat:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Et dokument blev opdateret.

Lad os tage et kig.

db.pets.find()

Resultat:

{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Denne gang blev hele dokumentet erstattet med det nye dokument (undtagen _id). Mark).

Denne metode erstatter hele dokumentet (undtagen _id). felt).

Ophæv

Alle ovenstående metoder accepterer en upsert argument, der sætter dig i stand til at udføre en upsert-operation.

Når upsert: true , dokumentet opdateres, hvis der er et match med forespørgselskriterierne, men hvis der ikke er noget match, indsættes et nyt dokument.

Eksempel:

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

Resultat:

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

I dette tilfælde var der ingen resultater, så et dokument blev slettet.

Lad os tjekke samlingen.

db.pets.find()

Resultat:

{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }

  1. ScaleGrid Fuldt administreret hosting til Redis™ nu tilgængelig på Azure

  2. Hvordan håndterer MongoDB samtidige opdateringer?

  3. Sådan finder du en understreng i et felt i Mongodb

  4. Opret unikt autoincrement-felt med mongoose