MongoDB: Как запросить элемент в списке элементов, который является типом списка? - PullRequest
1 голос
/ 21 июля 2011

Тестовый код:

[
{
    "_id": {
        "$oid": "4e27f4c0cfdb4a09b8ace1dd"
    },
    "Description": "NO.000001",
    "Title": "PM:000001",
    "Age": 14,
    "CommentList": [
        {
            "_id": {
                "$oid": "4e27f4c0cfdb4a09b8ace1da"
            },
            "Content": "Hello:00001",
            "Creator": "Jack00001",
            "Date": "2011-7-21 0:00:00",
            "InDate": {
                "$date": 1310400000000
            }
        },
        {
            "_id": {
                "$oid": "4e27f4c0cfdb4a09b8ace1db"
            },
            "Content": "Hello:00002",
            "Creator": "Jack00002",
            "Date": "2011-7-21 0:00:00",
            "InDate": {
                "$date": 1310400000000
            }
        },
        {
            "_id": {
                "$oid": "4e27f4c0cfdb4a09b8ace1dc"
            },
            "Content": "Hello:00003",
            "Creator": "Jack00003",
            "Date": "2011-7-21 0:00:00",
            "InDate": {
                "$date": 1310400000000
            }
        }
    ]
}

]

Я использую драйвер mongodb c # и, исходя из модели данных, мои ожидаемые результаты таковы:

[
{
    "_id": {
        "$oid": "4e27f4c0cfdb4a09b8ace1dd"
    },
    "Description": "NO.000001",
    "Title": "PM:000001",
    "Age": 14,
    "CommentList": [
        {
            "_id": {
                "$oid": "4e27f4c0cfdb4a09b8ace1db"
            },
            "Content": "Hello:00002",
            "Creator": "Jack00002",
            "Date": "2011-7-21 0:00:00",
            "InDate": {
                "$date": 1310400000000
            }
        },
    ...
    ]
}

]

Как получить комментарий? Спасибо!

1 Ответ

0 голосов
/ 10 ноября 2011

Насколько я знаю, невозможно на данный момент выбрать внедренный документ.Используя LINQ для курсора, вы можете отфильтровать результат:

var query = Query.And(new[] { Query.EQ("_id.$oid", documentId), Query.EQ("CommentList._id.$oid", commentId) });
var res = collection.FindOne(query);
res = res.Select(o=> new DocumentName 
{
  Description = o.Description,
  ....
  CommentList = o.CommentList.Where(x=>x.Id == commentId)
}); 
...