0

我觉得这一定很简单,但无法完成 - 任何帮助将不胜感激。我对 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;

        }

非常感谢任何帮助/指针。

-麦克风

4

2 回答 2

1

Mongodb 本身目前不支持此功能。在匹配时,返回整个文档,而不仅仅是匹配的子文档。我不确定规范是否为此提供支持并在驱动程序端进行过滤。mongodb 上此功能请求的开放 JIRA 项目是http://jira.mongodb.org/browse/SERVER-828

于 2011-03-02T22:39:18.187 回答
0

使用 map/reduce 检索嵌入的文档。

于 2011-08-03T11:24:10.957 回答