.net MongoDB的批量更新


  我Mongodb的批量更新是根據MongoDB的_id的字段來實現的,因為部署在阿里雲上,然后_id方面也查了很久的信息,感覺上應該是沒有問題的.

  首先說下思路,就是首先判斷id存在否,不存在則直接查前200條,然后記錄最后一條的ID,200條批量更新,結束后返回給循環,下次繼續使用,如果數量不足200,則返回false,結束循環。

  下面列出部分關鍵代碼:

 1                 FilterDefinition<BsonDocument> filter;
 2                 if (objectId.Length == 0)
 3                 {
 4                     filter = Builders<BsonDocument>.Filter.Exists("InsertTimeSpan", true);
 5                 }
 6                 else
 7                 {
 8                     filter = (Builders<BsonDocument>.Filter.Gt("_id", ObjectId.Parse(objectId)) &
 9                               Builders<BsonDocument>.Filter.Exists("InsertTimeSpan", true));
10                 }
11                 //  string selMaxId = string.Format("select orderId from hei where id=(select max(id) from hei)");                                   
12                 var collection = MongoAccessService.GetMongoCollection<BsonDocument>("Mongodb", collectionName);
13                 var projection = Builders<BsonDocument>.Projection
14                         .Include("raw_data.mobile_brief.number")
15                         .Include("InsertTimeSpan")
16                         .Include("orderId")
17                         .Include("taskId")
18                         .Include("cityName")
19                         .Include("operators")
20                         .Include("raw_data.mobile_details")
21                         .Include("_id")
22                     ;
23                 var result = collection.Find(filter).Project(projection).Limit(200);
24                 var listResult = result.ToList();
25                 if (listResult.Count > 0)
26                 {
27                     objectId = listResult[listResult.Count - 1]["_id"].ToString();
28 }
View Code

  括號可能有些問題,不要在意。

  批量更新代碼:

 1                     ///批量更新
 2                     List<UpdateOneModel<BsonDocument>> das = new List<UpdateOneModel<BsonDocument>>();
 3                     for (int i = 0; i < updateGjjMogos.Count; i++)
 4                     {
 5                         var filterUpdate = Builders<BsonDocument>.Filter.Eq("_id", updateGjjMogos[i].Id);
 6                         var update = Builders<BsonDocument>.Update.Set("data.general_analyzed_data.start_date", updateGjjMogos[i].MinDateTimes).Set("data.general_analyzed_data.end_date",(updateGjjMogos[i].MaxDateTimes));
 7                       //  var bsonDoc = updateGjjMogos[i].ToBsonDocument();
 8                         var sd = new UpdateOneModel<BsonDocument>(filterUpdate, update) { IsUpsert = true };
 9                         das.Add(sd);
10                     }
11                    var res =  collection.BulkWrite(das);
View Code

   將要更新的model放到UpdateModel實現list批量更新

  有什么不足和建議可以和我提,共同進步!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM