Mongodb C#查询嵌套文档

时间:2016-04-13 14:42:18

标签: c# mongodb linq

我使用mongodb和c#driver.I有一个包含子文档的集合

public class EntityA 
{
    public string Name { get; set; }

    public string Description { get; set; }

    public List<EntityB> BItems { get; set; }
}

public class EntityB
{
    public string BName { get; set; }

    public string BDesc { get; set; }
}

我想创建查询并列出EntityB项目

from a in mycollection
where BItems.Any(k => k.BName == entity.Name)
select a.BItems;

我可以查询嵌套文档,但是当我检索列表时,所有其他子项列表都列出了如何获取BItem列表以满足我的条件。我可以查询子文档但是当我想要列表时所有Bitems都来了mylist

3 个答案:

答案 0 :(得分:2)

如果我理解正确,当$(document).ready(function(){ $.each("#imagezoomcontainer img", function(){ $(this).attr("src", $(this).parent().children(".chatlink").attr("href"); }); }); 等于其父亲BItems字段时,您希望返回BName个收藏集?如果是这样的话,那就是:

Name

答案 1 :(得分:1)

据我所知,SelectMany符合在mongodb中展开属性并使用展开属性我们无法直接添加标准。

MongoDB finding nested objects that meet criteria

       var result = from k in (from a in col.AsQueryable()
                     from b in a.Columns        
                     select b) where k.ColumnName==a.Name select k;

答案 2 :(得分:0)

好吧,现在我使用MongoDB C#驱动程序2.2.3和MongoDB 3.2.1进行了测试,确实已经支持SelectMany,所以你也可以这样做:

 var entities= mycollection.AsQueryable<EntityA>()
                           .SelectMany(e=>e.BItems, (e,b)=>new {entityA=e,bitem=b})
                           .Where(t => t.entityA.Name == t.bitem.Name)
                           .Select(t=>t.bitem)
                           .ToList();

更新

另一种可能的解决方案是首先获取数据并在内存中过滤后者:

var entities= mycollection.AsQueryable<EntityA>()
                          .Select(e=>new{e.Name,e.BItems}).ToList();

var result=entities.SelectMany(e=>e.BItems.Where(b=>b.Name==e.Name));