475 Stimmen

Neues Feld zu jedem Dokument in einer MongoDB-Sammlung hinzufügen

Wie kann ich ein neues Feld zu jedem Dokument in einer bestehenden Sammlung hinzufügen?

Ich weiß, wie man das Feld eines bestehenden Dokuments aktualisiert, aber nicht, wie man ein neues Feld zu jedem Dokument in einer Sammlung hinzufügt. Wie kann ich dies in der mongo Muschel?

759voto

RameshVel Punkte 62428

Wie das Feld zur Aktualisierung der vorhandenen Sammlung, $set fügt ein neues Feld hinzu, wenn das angegebene Feld nicht vorhanden ist.

Sehen Sie sich dieses Beispiel an:

> 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:

Wenn Sie allen Ihren Sammlungen ein neues Feld hinzufügen möchten, müssen Sie einen leeren Selektor verwenden und das Multi-Flag auf true setzen (letzter Parameter), um alle Dokumente zu aktualisieren

db.your_collection.update(
  {},
  { $set: {"new_field": 1} },
  false,
  true
)

EDIT:

Im obigen Beispiel sind die letzten 2 Felder false, true spezifiziert die upsert y multi Flaggen.

Hochstellen: Wenn auf true gesetzt, wird ein neues Dokument erstellt, wenn kein Dokument den Abfragekriterien entspricht.

Multi: Wenn diese Option auf true gesetzt ist, werden mehrere Dokumente, die den Abfragekriterien entsprechen, aktualisiert. Bei false wird nur ein Dokument aktualisiert.

Dies ist für Mongo versions vor 2.2 . Für die neuesten Versionen ist die Abfrage ein wenig geändert

db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true})

92voto

qwertz Punkte 936

Seit MongoDB Version 3.2 können Sie mit updateMany() :

> db.yourCollection.updateMany({}, {$set:{"someField": "someValue"}})

28voto

LineDrop Punkte 371

Zur Verdeutlichung: Die Syntax für MongoDB Version 4.0.x lautet wie folgt:

db.collection.update({},{$set: {"new_field*":1}},false,true)

Hier ist ein funktionierendes Beispiel für das Hinzufügen einer veröffentlicht Feld zum Feld Artikel Sammlung und setzen den Wert des Feldes auf wahr :

db.articles.update({},{$set: {"published":true}},false,true)

26voto

Jatin Saradgikar Punkte 211
db.collection.updateMany({}, {$set: {"fieldName": ""}})

updateMany erfordert für jedes Dokument eine passende Bedingung, da wir die {} es ist immer wahr. Und das zweite Argument verwendet $set Operator, um das gewünschte Feld in jedes Dokument einzufügen.

6voto

Alex Jolig Punkte 12486

Pymongo 3.9+

update() ist jetzt veraltet und Sie sollten replace_one() , update_one() , oder update_many() stattdessen.

In meinem Fall habe ich update_many() und es hat mein Problem gelöst:

db.your_collection.update_many({}, {"$set": {"new_field": "value"}}, upsert=False, array_filters=None)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X