2011-01-27 14 views
28

Poniższy kod pozwoli mi zaktualizować wiadomość e-mail, w której FirstName = "john" i LastName = "Doe". W jaki sposób aktualizujesz wiadomości e-mail i telefon bez użycia metody Save()?Jak zaktualizować wiele pól przy użyciu Update.Set w MongoDB przy użyciu oficjalnego sterownika C#?

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

Odpowiedz

59

To bardzo proste;), wystarczy dodać inny zestaw lub jakąś operację innego do swojej aktualizacji:

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

Wow, nigdy nie myślałem o tym, próbowałem prawie wszystko z wyjątkiem tego jednego! LOL. Dzięki! – 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

jeśli chcesz jeszcze jedno pole dokumentu aktualizacji, wybierz flagę multi.

np MongoDB 2.0 lub 3.0V:

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