C # Mongodb. Проект Json в строгий тип после группировки

#c# #json #mongodb

#c# #json #mongodb

Вопрос:

Это мой запрос:

 db.getCollection('design_ideas').aggregate( 
  { $match : {'Deals.URL': 'warm-up-with-white'}},
  { $unwind : '$Deals' },
  { $match : {'Deals.URL': 'warm-up-with-white'}},
  {$group: {_id : '$Deals.URL', Deals: {$addToSet: '$Deals'}}}
)
 

Тот же запрос в C#:

 _mongoDB.GetCollection<DesignCategoryMongoModel>("design_ideas")
               .Aggregate()
               .Match(BsonDocument.Parse("{'Deals.URL': 'warm-up-with-white'}"))
               .Unwind("Deals")
               .Match(BsonDocument.Parse("{'Deals.URL': 'warm-up-with-white'}"))
               .Group(BsonDocument.Parse("{_id : '$Deals.URL', Deals: {$addToSet: '$Deals'}}"))               
               .FirstOrDefault();
 

Результатом запроса является один документ с такой структурой:

 {
     _id: 'url',
      Deals: [{
              DealId: 1,
              Name: 'Name',
              Products: [...]
              ...
      }]
}
 

Я знаю, что всегда получаю только один Deal объект в массиве результатов сделок.

Мой класс c #:

 public class Deal
{
    public int DealId {get; set;}
    public string Name {get; set;}
    public IEnumerable<Product> Products {get; set;}
}
 

Мой вопрос в том, как спроецировать результат Json на строгий тип C # и существует ли способ получить только один объект сделки (не массив)?

Комментарии:

1. json2csharp.com . exist way to get the only one Deal object (not array) Сначала запустите свой код, затем вы можете написать служебные функции для возврата одного объекта.

Ответ №1:

Для этого вы можете использовать BsonSerializer

 var MyDeals = BsonSerializer.Deserialize<List<Deal>>(aggregationResult);
 

Комментарии:

1. Спасибо! Я использовал project.