MongoDB學習筆記~大(da)叔(shu)分享批量添加—批量更新(xin)—批量刪除(chu)
說它是批量操作,就是說將集合對象一次提交到服務器,并對數據進行持久化,如果您的(de)(de)代碼是(shi)一次(ci)一次(ci)的(de)(de)提交,那不算是(shi)批量(liang)操作(zuo)!在之(zhi)前(qian)的(de)(de)mongodb倉(cang)儲中(zhong)并(bing)(bing)沒有對批量(liang)更(geng)新(xin)和(he)批量(liang)刪除進行實現,而(er)今天在項目中(zhong),還(huan)是(shi)實現了這種(zhong)批量(liang)的(de)(de)操作(zuo),并(bing)(bing)且(qie)已經通過測試,下面(mian)公開一下源代碼
public void Insert(IEnumerable<TEntity> item) { var list = new List<WriteModel<TEntity>>(); foreach (var iitem in item) { list.Add(new InsertOneModel<TEntity>(iitem)); } _table.BulkWriteAsync(list).Wait(); } public void Update(IEnumerable<TEntity> item) { var list = new List<WriteModel<TEntity>>(); foreach (var iitem in item) { QueryDocument queryDocument = new QueryDocument("_id", new ObjectId(typeof(TEntity).GetProperty(EntityKey).GetValue(iitem).ToString())); list.Add(new UpdateOneModel<TEntity>(queryDocument, Builders<TEntity>.Update.Combine(GeneratorMongoUpdate(iitem)))); } _table.BulkWriteAsync(list).Wait(); } public void Delete(IEnumerable<TEntity> item) { var list = new List<WriteModel<TEntity>>(); foreach (var iitem in item) { QueryDocument queryDocument = new QueryDocument("_id", new ObjectId(typeof(TEntity).GetProperty(EntityKey).GetValue(iitem).ToString())); list.Add(new DeleteOneModel<TEntity>(queryDocument)); } _table.BulkWriteAsync(list).Wait(); }
在程序實(shi)現之中,我們使用了WriteModel泛(fan)型(xing)對(dui)象,這將(jiang)存儲要插入,更(geng)新和刪除(chu)的(de)(de)對(dui)象,對(dui)于(yu)插入來(lai)說,只有一個(ge)參數就是它(ta)的(de)(de)實(shi)體集合(he),而(er)對(dui)象更(geng)新來(lai)說,它(ta)不僅有實(shi)體集合(he)而(er)且還有對(dui)應的(de)(de)條件QueryDocument,而(er)對(dui)于(yu)刪除(chu)操作(zuo)來(lai)說,只提供QueryDocument即可!