我使用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
答案 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));