it-swarm.com.de

Fügen Sie jedem Dokument in einer MongoDB-Sammlung ein neues Feld hinzu

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

Ich kann das Feld eines vorhandenen Dokuments aktualisieren, aber nicht jedem Dokument in einer Sammlung ein neues Feld hinzufügen. Wie kann ich das in der mongo Shell machen?

295
itsme

Entspricht dem aktualisierenden vorhandenen Sammlungsfeld $set fügt neue Felder hinzu, wenn das angegebene Feld nicht existiert.

Schauen 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 Ihrer Sammlung ein neues_Feld hinzufügen möchten, müssen Sie einen leeren Selektor verwenden und multi flag auf true (letzter Parameter) setzen, um alle Dokumente zu aktualisieren

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

EDIT:

Im obigen Beispiel letzte 2 Felder false, true gibt die Flags upsert und multi an.

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

Multi: Wenn dieser Wert auf true gesetzt ist, werden mehrere Dokumente aktualisiert, die die Abfragekriterien erfüllen. Wenn auf false festgelegt, wird ein Dokument aktualisiert.

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

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