2011-01-27 10 views
28

Il seguente codice mi consentirà di aggiornare l'e-mail dove FirstName = "john" e LastName = "Doe". Come aggiorni sia email che telefono senza usare il metodo Save()?Come si aggiorna più campi usando Update.Set in MongoDB usando il driver C# ufficiale?

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); 

risposta

59

E 'molto semplice;), è sufficiente aggiungere un altro insieme o qualche operazione altro per il vostro aggiornamento:

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

Wow, non ho mai pensato che, ho provato quasi tutto, tranne che uno! LOL. Grazie! – 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

se si desidera un campo di un altro documento di aggiornamento, quindi selezionare multi-flag.

ad esempio MongoDB 2.0 o 3,0 V:

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