Выбор внедренного объекта с помощью LINQ (из MongoDB)

Я чувствую, что это должно быть просто сделать, но не могу сделать это - любая помощь будет принята с благодарностью. Я относительно новичок в 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 (как один документ со встроенными вложенными документами). Что мне нужно сделать, это получить только один из вложенных документов ChildObject, хранящихся в документе ParentObject, используя ParentId и ChildId. У меня есть следующий вызов метода / метода, который почти выполняет то, что я хочу, но я могу только вернуть IList или один конкретный ChildObject на основе индекса (o, 1 и т. Д.):

// 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;

        }

Большое спасибо заранее за любую помощь / указатели.

-Майк

2 ответа

Решение

В настоящее время это не поддерживается в самом Mongodb. При совпадении возвращается весь документ, а не только соответствующий документ. Я не уверен, что норма обеспечивает поддержку для этого и фильтры на стороне водителя. Открытый элемент JIRA для запроса этой функции на сайте mongodb: http://jira.mongodb.org/browse/SERVER-828

Используйте карту / уменьшить, чтобы получить встроенный документ.

Другие вопросы по тегам