Как найти данные из вложенного массива?

1

У меня есть модель:

const schema = new mongoose.Schema({
  country: { type: String },
  code: { type: String },
  region: [{
    name: { type: String },
    city: [{
      name: { type: String },
      latitude: { type: String },
      longitude: { type: String },
    }],
  }],
})

Мне нужно получить список региона → город → имя (список названий городов) В начале я попытался запросить список города (массива)

const list = await Model.findOne(
  { $and: [{ code: req.params.code }, { 'region.name': 'Harjumaa' }] },
  { 'region.city.name': 1 },
)

И получить эти данные:

Изображение 174551

Затем я ищу список регионов и отправляю запрос:

Model.findOne({ code: req.params.code }, { region: 1 })

И получать данные так:

Изображение 174551

Я хочу получить список названий городов в том же формате.

Мой образец данных:

{
  "country": "Estonia",
  "code": "ee",
  "region": [
    {
      "name": "Harjumaa",
      "city": [
        {
          "name": "Aegviidu vald",
          "latitude": "59.27941132",
          "longitude": "25.62571907"
        },
        {
          "name": "Anija vald",
          "latitude": "59.27643967",
          "longitude": "25.48167992"
        }
      ]
    }
  ]
}
  • 0
    Можете ли вы предоставить пример данных
  • 0
    @AshayMandwarya Добавить в тело
Теги:
mongoose

2 ответа

0

$project с $region.city.name даст вам массив массивов, так как у вас есть два уровня вложенности. Чтобы исправить это, вы можете использовать $ lower с $ concatArrays, который сведет ваш конечный результат в один массив, попробуйте:

Model.aggregate([
    {
        $match: { code: "ee" }
    },
    {
        $project: {
            cityNames: {
                $reduce: {
                    input: "$region.city.name",
                    initialValue: [],
                    in: { $concatArrays: [ "$$this", "$$value" ] }
                }
            }
        }
    }
])
0

Вы можете использовать вложенную map

var a={
  "country": "Estonia",
  "code": "ee",
  "region": [
    {
      "name": "Harjumaa",
      "city": [
        {
          "name": "Aegviidu vald",
          "latitude": "59.27941132",
          "longitude": "25.62571907"
        },
        {
          "name": "Anija vald",
          "latitude": "59.27643967",
          "longitude": "25.48167992"
        }
      ]
    }
  ]
}
console.log(...a.region.map((e)=>e.city.map((x)=>x.name)))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню