Samme som opdatering af eksisterende samlingsfelt, $set
vil tilføje et nyt felt, hvis det angivne felt ikke eksisterer.
Tjek dette eksempel:
> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }
EDIT:
Hvis du vil tilføje et new_field til hele din samling, skal du bruge den tomme vælger og sætte multiflag til true (sidste param) for at opdatere alle dokumenter
db.your_collection.update(
{},
{ $set: {"new_field": 1} },
false,
true
)
EDIT:
I ovenstående eksempel sidste 2 felter false, true
angiver upsert
og multi
flag.
Ophæve: Hvis den er indstillet til sand, oprettes et nyt dokument, når intet dokument matcher forespørgselskriterierne.
Multi: Hvis den er indstillet til sand, opdateres flere dokumenter, der opfylder forespørgselskriterierne. Hvis indstillet til falsk, opdateres ét dokument.
Dette er til Mongo versions
før 2.2
. For de seneste versioner er forespørgslen ændret en smule
db.your_collection.update({},
{$set : {"new_field":1}},
{upsert:false,
multi:true})