Driver & Environment & Initialization
請參考
[MongoDB .NET Driver] Indexes.CreateOneAsync sample
Mapping Class
與之前文章不同
Mapping Class設計新增CreatedDate & ModifiedDate欄位
public class Member
{
public ObjectId Id { get; set; }
public string PersonId { get; set; }
public string Name { get; set; }
public int Gender { get; set; }
public string Phone { get; set; }
public int ZipCode { get; set; }
public string Address { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
}
Upsert & SetOnInsert
假設已知PersonId
欲更新其Phone並且更新ModifiedDate
若查詢不到此筆PersonId資料則新增寫入PersonId, Phone, ModifiedDate及CreatedDate
寫法如下
var filter = Builders<Member>.Filter.Eq<string>(m => m.PersonId, id);
var updates = new List<UpdateDefinition<Member>>();
updates.Add(Builders<Member>.Update.Set(m => m.Phone, phone));
updates.Add(Builders<Member>.Update.Set(m => m.ModifiedDate, DateTime.Now));
// SetOnInsert: 只有新增時才會寫入其值
updates.Add(Builders<Member>.Update.SetOnInsert(m => m.CreatedDate, DateTime.Now));
// Upsert: UpdateOptions -> IsUpsert = true
var result = db.GetCollection<Member>(colName).UpdateOneAsync(filter, Builders<Member>.Update.Combine(updates), new UpdateOptions() { IsUpsert = true }).ConfigureAwait(continueOnCapturedContext: false);