получить значение определенного элемента в массиве mongo db

#mongodb #collections

#mongodb #Коллекции

Вопрос:

Для приведенной ниже выборки мне нужны все названия улиц в массиве адресов. Как мы должны находить значения только определенного элемента? можем ли мы использовать агрегацию

 {
        "_id" : ObjectId("4c4b1476238d3b4dd5000002"),
        "username" : "pbakkum",
        "first_name" : "Peter",
        "last_name" : "Bakkum",
        "age" : 21,
        "addresses" : [
                {
                        "name" : "home",
                        "street" : "588 5th Street",
                        "city" : "Brooklyn",
                        "state" : "CA",
                        "zip" : 11215
                },
                {
                        "name" : "work",
                        "street" : "588 5th Street",
                        "city" : "Brooklyn",
                        "state" : "CA",
                        "zip" : 11215
                },
                {

                }
        ]
}
{
        "_id" : ObjectId("4c4b1476238d3b4dd5000001"),
        "username" : "kbanker",
        "email" : "kylebanker@gmail.com",
        "first_name" : "Kyle",
        "last_name" : "Banker",
        "hashed_password" : "bd1cfa194c3a603e7186780824b04419",
        "addresses" : [
                {
                        "name" : "home",
                        "street" : "588 5th Street",
                        "city" : "Brooklyn",
                        "state" : "NY",
                        "zip" : 11215
                },
                {
                        "name" : "work",
                        "street" : "1 E. 23rd Street",
                        "city" : "New York",
                        "state" : "NY",
                        "zip" : 10010
                }
        ],
        "payment_methods" : [
                {
                        "name" : "VISA",
                        "last_four" : 2127,
                        "crypted_number" : "43f6ba1dfda6b8106dc7",
                        "expiration_date" : ISODate("2016-05-01T07:00:00Z")
                }
        ],
        "age" : 151
} 
  

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

Комментарии:

1. Что вы уже пробовали?

Ответ №1:

Вы можете попробовать использовать оператор $map с агрегациейвведите описание ссылки здесь.

 db.collection.aggregate([
    { 
        "$project": { "_id": 0, "data": { 
            "$map": { "input": "$addresses", "as": "add", "in": "$$add.street" } } }
    }
])
  

Комментарии:

1. Большое спасибо Нишу Тайалу. Идеально!

2. Если это работает для вас, не стесняйтесь принять ответ или проголосовать за него. Это помогает другим людям 🙂

3. Не могу этого увидеть. 🙂