2017-08-01 33 views
-2

这个问题涉及How to project specific fields in array on filtered lookup 中的示例,其中在“合并”表上应用了过滤器。 现在我想将它转换为C#中的查询,但我无法将过滤器添加到投影中。这是我得到的:MongoDB在C#中过滤查找

db.GetCollection("meta") 
.Aggregate() 
.Match(new BsonDocument { { "test", "OK" }}) 
.Lookup("merge","Exp","Exp","kin") 
.Project(Builders<BsonDocument>.Projection 
     .Include("Exp") 
     .Include("test") 
     .Include("kin") 
) 

任何想法?

回答

1

看来工作艰辛的道路:

db.GetCollection("meta") 
.Aggregate() 
.Match(new BsonDocument { { "test", "OK" }}) 
.Lookup("merge","Exp","Exp","kin") 
.Project(new BsonDocument { 
    { "Exp" , 1}, 
    { "test" , 1}, 
    { "kin", new BsonDocument { 
     { "$filter", new BsonDocument { 
      { "input", "$kin"}, 
      { "as", , "kin"}, 
      { "cond", new BsonDocument { 
       { "$eq", new BsonArray { "$$kin.M2", "val"}}} 
      }} 
     }} 
    }}) 
    .Project(new BsonDocument { 
    { "Exp", 1 }, 
    {"test", 1}, 
    {"date", 1}, 
    {"kin.M1",1}, 
    {"kin.M2",1}, 
    {"kin.T",1 }}) 

但当然,这将是很好使用蒙戈驱动程序的API。