LoginSignup
0
0

More than 5 years have passed since last update.

[MongoDB .NET Driver] Upsert & SetOnInsert sample

Last updated at Posted at 2015-09-10

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0