Använd update()
metod eller save()
metod för att uppdatera dokument i MongoDB.
I MongoDB, både update()
metoden och save()
metod kan användas för att uppdatera ett dokument.
update()
metod uppdaterar värden i ett eller flera befintliga dokument, medan save()
metod ersätter ett dokument med dokumentet som skickas in som en parameter.
Men update()
metoden kan också ersätta hela dokumentet, beroende på parametern som skickas in.
update()
Metod
Här är ett exempel på update()
metod.
Låt oss först välja en post att uppdatera:
db.musicians.find({ _id: 6 }).pretty()
Resultat:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Jeff gör faktiskt mycket mer än att bara sjunga. Så låt oss lägga till några fler instrument. Vi använder $set
operatör för att uppdatera ett enda fält.
db.musicians.update( { _id: 6 }, { $set:{ instrument : [ "Vocals", "Guitar", "Sitar" ] } } )
Resultat:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Om vi nu gör en annan fråga ser vi att dokumentet har uppdaterats som specificerat:
db.musicians.find({ _id: 6 }).pretty()
Resultat:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : [ "Vocals", "Guitar", "Sitar" ], "born" : 1969 }
Några fler alternativ:
- Om fältet inte finns,
$set
operatören lägger till ett nytt fält med det angivna värdet, förutsatt att det nya fältet inte bryter mot en typbegränsning. - Du kan också använda
{ upsert: true }
för att skapa ett nytt dokument när inget dokument matchar frågan. - Du kan använda
{ multi: true }
för att uppdatera flera dokument som uppfyller frågekriterierna. Som standard är det här alternativet satt tillfalse
, så bara ett dokument uppdateras om du inte ställer in det påtrue
.
save()
Metod
save()
metod är en korsning mellan update()
och insert()
. När du använder save()
metod, om dokumentet finns kommer det att uppdateras. Om det inte finns skapas det.
Om du inte anger ett _id
kommer MongoDB att skapa ett dokument med ett _id
som innehåller ett ObjectId
värde (enligt en insert()
).
Om du anger ett _id
fältet utför den en uppdatering med { upsert: true }
, vilket innebär att det skapar ett nytt dokument om inget dokument matchar frågan.
Vi har för närvarande inga dokument hos våra
producenter
samling. Låt oss skapa en med save()
metod:
db.producers.save({ _id: 1, name: "Bob Rock" })
Resultat:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
Om vi nu söker efter producenterna samling ser vi vår nyskapade post:
db.producers.find()
Resultat:
{ "_id" : 1, "name" : "Bob Rock" }