0

これは簡単なことだと思いますが、それを成し遂げることはできません。どんな助けでも大歓迎です。私はLINQとMongoDBに比較的慣れていません。

私は次の2つのエンティティを持っています:

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インスタンスに固執しています(サブドキュメントが埋め込まれた1つのドキュメントとして)。私がする必要があるのは、ParentIdとChildIdを使用して、ParentObjectドキュメント内に格納されているChildObjectサブドキュメントの1つだけを取得することです。次のメソッド/メソッド呼び出しがありますが、これはほぼ必要なことを実行しますが、インデックス(o、1など)に基づいてIListまたは1つの特定の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自体ではサポートされていません。一致すると、一致したサブドキュメントだけでなく、ドキュメント全体が返されます。normがこれをサポートし、ドライバー側でフィルターを提供するかどうかはわかりません。mongodbでのこの機能リクエストのオープンJIRAアイテムは、http://jira.mongodb.org/browse/SERVER-828です

于 2011-03-02T22:39:18.187 に答える
0

map / reduceを使用して、埋め込まれたドキュメントを取得します。

于 2011-08-03T11:24:10.957 に答える