2011-01-27 16 views
28

次のコードでは、FirstName = "john"とLastName = "Doe"の電子メールを更新できます。 Save()メソッドを使用せずにEmailとPhoneの両方をどのように更新しますか?公式のC#ドライバを使用してMongoDBのUpdate.Setを使用して複数のフィールドを更新するにはどうすればよいですか?

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

答えて

59

それは非常に簡単です。、ちょうどあなたの更新に別のセットまたはいくつかの他の操作を追加します):

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

うわー、私はそのことについて考えたことはありません、私は1つを除いてちょうど約すべてのものを試してみました!笑。ありがとう! – 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

さらにドキュメントを更新したい場合は、マルチフラグを選択します。

例えば2.0または3.0VをMongoDBの:

yourCollection.Update(_filter 
         , _update 
         , new MongoUpdateOptions() { Flags = UpdateFlags.Multi }) 
関連する問題