mangodb如何根据多重内嵌数组进行过滤

kenzodeng 2017-10-03 04:30:25
[
{
"id": "1234-adsfsgf-dfrtfgh1",
"Name": "gfrwe",
"CategoryList": [
{
"Name": "Cate1",
"id": "1234-gverg-gergr",
"Items": [
{
"Name": "itemName",
"id": "1234-gverg-gergrer"
},
{
"Name": "itemName2",
"id": "1234-gverg-gergrer2"
},
{
"Name": "itemName3",
"id": "1234-gverg-gergrer3"
}
]
},
{
"Name": "Cate2",
"id": "1234-gverg-gergr",
"Items": [
{
"Name": "itemName",
"id": "1234-gverg-gergrer"
},
{
"Name": "itemName3",
"id": "1234-gverg-gergrer3"
}
]
},
{
"Name": "Cate3",
"id": "1234-gverg-gergr",
"Items": [
{
"Name": "itemName",
"id": "1234-gverg-gergrer"
},
{
"Name": "itemName2",
"id": "1234-gverg-gergrer2"
}
]
}
]
},
{
"id": "1234-adsfsgf-dfrtfgh2",
"Name": "gfrwe",
"CategoryList": [
{
"Name": "Cate1",
"id": "1234-gverg-gergr",
"Items": [
{
"Name": "itemName",
"id": "1234-gverg-gergrer"
},
{
"Name": "itemName2",
"id": "1234-gverg-gergrer2"
}
]
},
{
"Name": "Cate3",
"id": "1234-gverg-gergr",
"Items": [
{
"Name": "itemName",
"id": "1234-gverg-gergrer"
},
{
"Name": "itemName2",
"id": "1234-gverg-gergrer2"
},
{
"Name": "itemName3",
"id": "1234-gverg-gergrer3"
}
]
}
]
},
{
"id": "1234-adsfsgf-dfrtfgh3",
"Name": "gfrwe",
"CategoryList": [
{
"Name": "Cate1",
"id": "1234-gverg-gergr",
"Items": [
{
"Name": "itemName2",
"id": "1234-gverg-gergrer2"
},
{
"Name": "itemName3",
"id": "1234-gverg-gergrer3"
}
]
}
]
}
]


假设文档数据库A储存的是以上的内容 返回给一个IOrderQueryAble<A>()接口;不把数据全部放到内存的情况下如何把items的Name=="itemName3"的数据过滤出来呢?
我尝试过这样过滤:
var res=IOrderQuery<A>().find(o=>o).findMany(x=>x.CategoryList).findMany(t=>t.Items).Where(x=>x.Name=="itemName3").ToList();
但是这样返回的却是List<Item> 但是我想要的是List<A>
初接触Mangodb 求大神指点迷津 感谢不尽
...全文
866 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
mongodb 团队为 .net 开发了 linq provider。例如文档 http://mongodb.github.io/mongo-csharp-driver/2.4/reference/driver/crud/linq/所示。从相关文档查看一下他们到底有没有实现原生查询支持。如果没有,就不要使用 linq,直接使用 mongodb 原生的查询语句来进行查询,不要使用 linq。
  • 打赏
  • 举报
回复
既然你要返回 List<A>,那么你为什么要写那么多 findMany 呢?你不要返回 Item,而只要以他们为查询条件,那么显然只可能在 where 中使用它们,而不是 FindMany。 另外,你的原始的 Collection 是否对 document.CategoryList.Items.Name 建立了 Mongodb 原生的数据库索引? 你的查询 provider 是什么?你是否能监视到它发给 mongodb 数据库的原生查询语句?如果它是把冗余数据读到内存中的,那么应该尽早淘汰它,而不应该继续用。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧