выбор документа с отфильтрованными значениями встроенных документов - PullRequest
0 голосов
/ 14 октября 2018

Можете ли вы подсказать мне, как я могу сделать C # эквивалентным

db.UserProfile.aggregate([
    {$match:{_id:"sen"}},  
    {
          $project: {
             DemRole: {
                $filter: {
                   input: "$DemRole",
                   as: "item",
                   cond: { $eq: [ "$$item.Name", "CO" ] }
                }
             }
          }
       }
    ])

Я пытаюсь выбрать документ, если он соответствует _id, и получить результат после применения фильтра к внедренным документам. Это отлично работает в MongoDBна Robo3T.Но я не могу перевести то же самое в C #.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Спасибо за ответ.Это работает в C # сейчас.Но ниже показано, как я мог получить информацию.

 var pipeline = collection.Aggregate()
                         .Match(up => up.UserID == userId)
                         .Project(up => new { DemRole = up.DemRole.Where(c => c.Status== true) }).ToList();
              // .Project(dem => dem.DemRole.Where(c => c.Status == true));//.ToList();


        foreach(var pipe in pipeline)
        {
            return pipe.DemRole.ToList();

        }

Я хотел бы знать, что операция, представленная ниже, выполняет код

.Project(up => new { DemRole = up.DemRole.Where(c => c.Status== true) })

и почему код ниже не работает.

  .Project(dem => dem.DemRole.Where(c => c.Status == true));//.ToList();

Более того, мне пришлось запустить foreach, чтобы получить информацию, приведенную ниже.

foreach(var pipe in pipeline)
        {
            return pipe.DemRole.ToList();

        }

Если вы могли бы объяснить вышеприведенные строки или указать мне какую-то документацию, через которую я могу пройти, этобыло бы лучше.

0 голосов
/ 14 октября 2018

Это должно помочь вам:

var collection = new MongoClient().GetDatabase("test").GetCollection<User>("UserProfile");
var pipeline = collection.Aggregate()
                         .Match(up => up.Id == "sen")
                         .Project(up => new { DemRole = up.DemRole.Where(c => c.Name == "CO") });
...