2011-01-27 3 views
28

Le code suivant me permettra de mettre à jour l'Email où FirstName = "john" et LastName = "Doe". Comment mettre à jour à la fois Email et Téléphone sans utiliser la méthode Save()?Comment mettre à jour plusieurs champs en utilisant Update.Set dans MongoDB en utilisant le pilote C# officiel?

MongoDB.Driver.MongoServer _server = MongoDB.Driver.MongoServer.Create("mongodb://localhost"); 
MongoDB.Driver.MongoDatabase _dataBase = _server.GetDatabase("test"); 
MongoDB.Driver.MongoCollection<Person> _person = _dataBase.GetCollection<Person>("person"); 

//Creat new person and insert it into collection 
ObjectId newId = ObjectId.GenerateNewId(); 
Person newPerson = new Person(); 
newPerson.Id = newId.ToString(); 
newPerson.FirstName = "John"; 
newPerson.LastName = "Doe"; 
newPerson.Email = "[email protected]"; 
newPerson.Phone = "8005551222"; 
_person.Insert(newPerson); 

//Update phone and email for all record with firstname john and lastname doe 
MongoDB.Driver.Builders.QueryComplete myQuery = MongoDB.Driver.Builders.Query.And(MongoDB.Driver.Builders.Query.EQ("FirstName", "John"), MongoDB.Driver.Builders.Query.EQ("LastName", "Doe")); 
MongoDB.Driver.Builders.UpdateBuilder update = MongoDB.Driver.Builders.Update.Set("Email", "[email protected]"); 

_person.Update(myQuery, update); 

Répondre

59

Il est très simple;), il suffit d'ajouter un autre ensemble ou une opération d'autre à la votre mise à jour:

var update = Update.Set("Email", "[email protected]") 
        .Set("Phone", "4455512"); 
+0

Wow, je n'y avais jamais pensé, j'ai essayé à peu près tout, sauf celui-là! LOL. Merci! – atbebtg

3
var _personobj = _person 
{ 
    Id = 10, // Object ID 
    Email="[email protected]", 
    Phone=123456, 

}; 
var replacement = Update<_person>.Replace(_personobj); 
collection.Update(myquery, replacement); 
0

Si vous souhaitez mettre à jour un autre champ de document, choisissez multi-flag.

par exemple MongoDB 2.0 ou 3.0V:

yourCollection.Update(_filter 
         , _update 
         , new MongoUpdateOptions() { Flags = UpdateFlags.Multi }) 
Questions connexes