2016-09-09 3 views
1

У меня есть Mongo DB, и я использую C# .Net для взаимодействия с mongo db. В C# API есть методы для поиска документа одного документа и его обновления одновременно. Например, FindOneAndUpdateAsync.
Однако я не смог найти какой-либо метод для поиска нескольких документов и одновременного обновления их асинхронно.MongoDB: Как найти несколько документов и обновить их одновременно?

Код ниже для поиска и обработки каждого документа асинхронно. Как я также обновляю этот документ одновременно?

public async Task<IList<IDictionary<string, string>>> DoWork() 
    { 
     var collection = _mongoDatabase.GetCollection<BsonDocument>("units"); 
     var filterBuilder = Builders<BsonDocument>.Filter; 
     var filter = filterBuilder.Ne<string>("status", "INIT") & 
      (filterBuilder.Exists("isDone", false) | 
      filterBuilder.Eq<bool>("isDone", false)); 

     // I want to pass this update filter to update the document. But not sure how 
     var update = Builders<BsonDocument>.Update 
      .CurrentDate("startTime"); 

     var sort = Builders<BsonDocument>.Sort.Ascending("startTime"); 

     var projection = Builders<BsonDocument>.Projection 
      .Include("_id")     
      .Include("fileName"); // for bravity i have removed other projection elements 

     var output = new List<IDictionary<string, string>>(); 

     // How do i pass update filter and update the document at the same time?? 
     await collection 
      .Find(filter) 
      .Sort(sort) 
      .Project(projection)     
      .ForEachAsync((unit) => 
      { 
       var dictionary = new Dictionary<string, string>(); 
       Recurse(unit, dictionary); 
       output.Add(dictionary); 
      }); 

     return output.Count > 0 ? output : null; 
    } 

ответ

0

Этого не существует в mongo .Net api см. here.

Просто используйте сочетание Найти и UpdateManyAsync.

+0

Я искал, как это сделать? Записываю ли я его в одной команде или в двух отдельных вызовах? – LP13

+0

Два отдельных вызова: поток должен использовать find для извлечения ваших документов, при необходимости использовать атрибуты документов, использовать UpdateMany, чтобы сохранить их все. Взгляните на mongo api docs для получения точных примеров того, как использовать эти вызовы. – sauce