Подтвердить что ты не робот

MongoDB получает SubDocument

Я хотел бы получить вспомогательный документ из документа в MongoDB. У меня есть следующий документ:

{
    "_id" : "10000",
    "password" : "password1",
    "name" : "customer1",
    "enabled" : true,
    "channels" : [ 
        {
            "id" : "10000-1",
            "name" : "cust1chan1",
            "enabled" : true
        }, 
        {
            "id" : "10000-2",
            "name" : "cust1chan2",
            "enabled" : true
        }
    ]
}

В результате я хотел бы:

{
    "id" : "10000-1",
    "name" : "cust1chan1",
    "enabled" : true
}

Однако, самое лучшее, что я могу сделать до сих пор, заключается в следующем запросе:

db.customer.find({"channels.id" : "10000-1"}, {"channels.$" : 1, "_id" : 0})

Но это дает мне следующий результат:

{
    "channels" : [ 
        {
            "id" : "10000-1",
            "name" : "cust1chan1",
            "enabled" : true
        }
    ]
}

Кто-нибудь знает, можно ли написать запрос, который даст мне мой желаемый результат? Любая помощь будет высоко оценена.

4b9b3361

Ответ 1

Вы можете сделать это с помощью Aggregation Framework. Запрос будет выглядеть примерно так:

db.customer.aggregate([
    {$unwind : "$channels"},
    {$match : {"channels.id" : "10000-1"}},
    {$project : {_id : 0, 
                 id : "$channels.id", 
                 name : "$channels.name", 
                 enabled : "$channels.enabled"}}
])