次のコードにより、FirstName = "john"およびLastName = "Doe"のメールを更新できます。 Save()メソッドを使用せずに電子メールと電話の両方を更新するにはどうすればよいですか?
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);
それは非常に簡単です;)、別のセットまたは他の操作を更新に追加するだけです:
var update = Update.Set("Email", "[email protected]")
.Set("Phone", "4455512");
ジェネリックでタイプセーフな Update<TDocument>
:
var update = Update<Person>.
Set(p => p.Email, "[email protected]").
Set(p => p.Phone, "4455512");
var _personobj = _person
{
Id = 10, // Object ID
Email="[email protected]",
Phone=123456,
};
var replacement = Update<_person>.Replace(_personobj);
collection.Update(myquery, replacement);
条件付き更新には、次のようなものを使用できます
var updList = new List<UpdateDefinition<MongoLogEntry>>();
var collection = db.GetCollection<MongoLogEntry>(HistoryLogCollectionName);
var upd = Builders<MongoLogEntry>.Update.Set(r => r.Status, status)
.Set(r => r.DateModified, DateTime.Now);
updList.Add(upd);
if (errorDescription != null)
updList.Add(Builders<MongoLogEntry>.Update.Set(r => r.ErrorDescription, errorDescription));
var finalUpd = Builders<MongoLogEntry>.Update.Combine(updList);
collection.UpdateOne(r => r.CadNum == cadNum, finalUpd, new UpdateOptions { IsUpsert = true });
または、単にレコードをポップアウトしてから、変更して置き換えます。
ドキュメントのフィールドをもう1つ更新する場合は、マルチフラグを選択します。
たとえば、mongodb 2.0または3.0v:
yourCollection.Update(_filter
, _update
, new MongoUpdateOptions() { Flags = UpdateFlags.Multi })