549 Stimmen

MongoDB-Feld mit dem Wert eines anderen Feldes aktualisieren

Ist es in MongoDB möglich, den Wert eines Feldes mit dem Wert eines anderen Feldes zu aktualisieren? Die entsprechende SQL-Anweisung wäre etwa wie folgt:

UPDATE Person SET Name = FirstName + ' ' + LastName

Und der MongoDB-Pseudocode würde lauten:

db.person.update( {}, { $set : { name : firstName + ' ' + lastName } );

0voto

user1239961 Punkte 36

(Ich hätte dies als Kommentar gepostet, konnte es aber nicht)

Für alle, die hier landen und versuchen, ein Feld mit einem anderen im Dokument mit dem c#-Treiber zu aktualisieren... Ich konnte nicht herausfinden, wie man eines der UpdateXXX Methoden und ihre zugehörigen Überladungen, da sie eine UpdateDefinition als Argument.

// we want to set Prop1 to Prop2
class Foo { public string Prop1 { get; set; } public string Prop2 { get; set;} } 

void Test()
{ 
     var update = new UpdateDefinitionBuilder<Foo>();
     update.Set(x => x.Prop1, <new value; no way to get a hold of the object that I can find>)
}

Als Abhilfe habe ich herausgefunden, dass Sie die RunCommand Methode auf eine IMongoDatabase ( https://docs.mongodb.com/manual/reference/command/update/#dbcmd.update ).

var command = new BsonDocument
        {
            { "update", "CollectionToUpdate" },
            { "updates", new BsonArray 
                 { 
                       new BsonDocument
                       {
                            // Any filter; here the check is if Prop1 does not exist
                            { "q", new BsonDocument{ ["Prop1"] = new BsonDocument("$exists", false) }}, 
                            // set it to the value of Prop2
                            { "u", new BsonArray { new BsonDocument { ["$set"] = new BsonDocument("Prop1", "$Prop2") }}},
                            { "multi", true }
                       }
                 }
            }
        };

 database.RunCommand<BsonDocument>(command);

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