选择具有嵌入文档的过滤值的文档

时间:2018-10-14 12:23:24

标签: c# mongodb aggregation

您能指导我如何使C#等效

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

我试图选择一个与_id匹配的文档并在对嵌入式文档应用过滤器后检索结果。它在Robo3T的MongoDB中运行良好。但是我无法在C#中翻译相同的内容。

2 个答案:

答案 0 :(得分:1)

这应该可以帮助您:

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") });

答案 1 :(得分:0)

感谢您的回答。它现在可以在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();

        }

如果您能解释以上内容或为我提供一些我可以阅读的文档,那会更好。