Выбрать вложенные атрибуты Монго в виде столбцов - PullRequest
0 голосов
/ 10 января 2019

Ниже моя структура монго

{ 
    "_id" : ObjectId("5bfbc18e28198e2f74e1d2d0"), 
    "address" : {
        "building" : "1007", 
        "coord" : [
            -73.856077, 
            40.848447
        ], 
        "street" : "Morris Park Ave", 
        "zipcode" : "10462"
    }, 
    "borough" : "Bronx", 
    "cuisine" : "Bakery"
}

При запуске db.Restaurant.find ({"address.building": "1007"}, {"address.building": 1, "address.street": 1, "address.zipcode": 1}) запрос дает результат как

{ 
    "_id" : ObjectId("5bfbc18e28198e2f74e1d2d0"), 
    "address" : {
        "building" : "1007", 
        "street" : "Morris Park Ave", 
        "zipcode" : "10462"
    }
}

Так что он по-прежнему возвращает результат в виде вложенных документов, но я хочу получить эти вложенные атрибуты в качестве имени столбца и не хочу, чтобы вложенная структура. Как я могу изменить этот запрос для этого? expected output image

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы можете попробовать следующий агрегат. Сначала он соответствует любым вашим условиям, а затем проецирует необходимые поля без вложенности.

db.test.aggregate([
    {
        $match : {
            "address.building":"1007"
        }
    },
    {
        $project : {
            building : "$address.building",
            street : "$address.street",
            zipcode : "$address.zipcode"
        }
    }
])

Выход:

{
    "_id" : ObjectId("5bfbc18e28198e2f74e1d2d0"),
    "building" : "1007",
    "street" : "Morris Park Ave",
    "zipcode" : "10462"
}

Дайте мне знать, если это помогло!

0 голосов
/ 10 января 2019

find запрос может ограничивать только поля. Если вы хотите изменить данные, вам нужно использовать aggregation вместо

db.collection.aggregate([
  { "$match": { "address.building": "1007" }},
  { "$replaceRoot": { "newRoot": "$address" }},
  { "$project": { "coord": 0 }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...