我觉得这一定很简单但不能完成 - 任何帮助都会非常感激。我对LINQ和MongoDB相对较新。
我有以下两个实体:
class ParentObject
{
GUID ParentId {get;set;}
IList<ChildObject> ChildObjects {get;set;}
...other properties
ParentObject()
{
childObjects = new List<ChildObject>();
}
}
class ChildObject
{
GUID ChildId {get;set;}
...other properties
}
我坚持使用MongoDB实例(作为一个文档,嵌入了子文档)。我需要做的是使用ParentId和ChildId 仅检索存储在ParentObject文档中的一个ChildObject子文档。我有以下方法/方法调用几乎完成我想要的但我只能根据索引(o,1等)返回IList或一个特定的ChildObject:
// I know this won't work
var parentId = (Some GUID);
var childId = (Some GUID);
var result =
SingleWithSelect<ParentObject, ChildObject>
(
x => x.Id == parentId && x.ChildObjects.ChildId == ChildId,
y => y.ChildObject
);
public TResult SingleWithSelect<T, TResult>(
System.Linq.Expressions.Expression<Func<T, bool>> whereExpression,
System.Linq.Expressions.Expression<Func<T, TResult>> selectExpression)
where T : class, new()
{
TResult retval = default(TResult);
using (var db = Mongo.Create(ConnectionString()))
{
retval = db.GetCollection<T>().AsQueryable()
.Where(whereExpression)
.Select(selectExpression)
.SingleOrDefault();
}
return retval;
}
非常感谢任何帮助/指针。
-Mike
答案 0 :(得分:1)
Mongodb本身目前不支持此功能。在匹配时,将返回整个文档,而不仅仅是匹配的子文档。我不确定norm是否为此提供支持并在驱动程序端进行过滤。 mongodb上此功能请求的打开JIRA项目为http://jira.mongodb.org/browse/SERVER-828
答案 1 :(得分:0)
使用map / reduce检索嵌入的文档。