it-swarm.com.de

MongoDB: Wie kann man mehrere Dokumente mit einem einzigen Befehl aktualisieren?

Ich war überrascht zu erfahren, dass der folgende Beispielcode nur ein einzelnes Dokument aktualisiert:

> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});

> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});

> db.test.find({"test":"success!"}).count();
1

Ich weiß, ich kann durchlaufen und aktualisieren, bis sie alle geändert sind, aber das scheint furchtbar ineffizient zu sein. Gibt es einen besseren Weg?

98
Luke Dennis

Kürzlich wurde ein Multi-Update hinzugefügt, das nur in den Entwicklungsversionen (1.1.3) verfügbar ist. Von der Shell aus führen Sie ein Multi-Update durch, indem Sie true als viertes Argument an update() übergeben, wobei das dritte Argument das Argument für das Upsert ist:

db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);

Für Versionen von mongodb 2.2+ müssen Sie die Option multi true setzen, um mehrere Dokumente gleichzeitig zu aktualisieren.

db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})

Für Versionen von mongodb 3.2+ können Sie auch die neue Methode updateMany() verwenden, um mehrere Dokumente gleichzeitig zu aktualisieren, ohne dass die separate multi-Option erforderlich ist.

db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
175
mdirolf

UPDATE ab V2.2 hat die Update-Funktion folgende Form:

 db.collection.update(
   <query>,
   <update>,
   { upsert: <boolean>, multi: <boolean> }
)

Die ausgewählte Antwort gilt nicht mehr.

https://docs.mongodb.com/manual/reference/method/db.collection.update/

31
user602525

Fügen Sie für Mongo-Version> 2.2 ein Feld-Multi hinzu und setzen Sie es auf true

db.Collection.update({query}, 
                 {$set: {field1: "f1", field2: "f2"}},
                 {multi: true })
12
Kartik Singh

Ich habe einen Weg geschaffen, dies mit einer besseren Schnittstelle zu tun.

  • db.collection.find({ ... }).update({ ... }) - Multi Update
  • db.collection.find({ ... }).replace({ ... }) - einmaliger Austausch
  • db.collection.find({ ... }).upsert({ ... }) - single upssert
  • db.collection.find({ ... }).remove() - Multi entfernen

Sie können auch ein Limit anwenden, überspringen, sortieren und Aktualisierungen entfernen, indem Sie sie vorher verketten.

Wenn Sie interessiert sind, checken Sie aus Mongo-Hacker

8
Tyler Brock

MongoDB findet nur ein übereinstimmendes Dokument, das den Abfragekriterien entspricht, wenn Sie einen Aktualisierungsbefehl absetzen. Das Dokument, das zuerst gefunden wird, wird aktualisiert, auch wenn weitere Dokumente vorhanden sind, die den Kriterien entsprechen, werden diese ignoriert.

um dies zu vermeiden, können Sie in Ihrer Aktualisierungsanweisung die Option "MULTI" angeben. Dies bedeutet, dass Sie alle Documnets aktualisieren, die den Abfragekriterien entsprechen. Scannen Sie nach allen documnets in der Sammlung, finden Sie diejenigen, die den Kriterien entsprechen, und aktualisieren Sie:

db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
3

Geben Sie im MongoDB-Client Folgendes ein: 

db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})

Neu in Version 3.2

Params ::

{}:  select all records updated

Schlüsselwortargument multi nicht verwendet

3
Boseam

Ich hatte das gleiche Problem und fand die Lösung, und es funktioniert wie ein Zauber

setzen Sie das Flag multi wie folgt auf true:

 db.Collection.update(
                {_id_receiver: id_receiver},
               {$set: {is_showed: true}},
                {multi: true}   /* --> multiple update */
            , function (err, updated) {...});

ich hoffe das hilft :)

1
Amine_Dev

Sie können verwenden. " 

        Model.update({
            'type': "newuser"
        }, {
            $set: {
                email: "[email protected]",
                phoneNumber:"0123456789"
            }
        }, {
            multi: true
        },
        function(err, result) {
            console.log(result);
            console.log(err);
        })  `
0
Jitendra

Für Versionen von Mongodb 3.2+ können Sie die Methode updateMany () verwenden, um mehrere Dokumente zu aktualisieren.

http://answerexpress.blogspot.com/2018/09/mongodb-how-to-update-multiple.html

0
Sunil Jose

Alle neuesten Versionen von mongodb updateMany () funktionieren einwandfrei

db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});
0
KARTHIKEYAN.A