.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