javascript - 如何从嵌套数组中查找数据?

标签 javascript mongodb mongoose

我有一个模型:

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 },
)

并接收此数据:

enter image description here

然后我搜索我发送查询的区域列表:

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

然后像这样接收数据:

enter image description here

我想获取相同格式的城市名称列表。

我的数据样本:

{
  "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"
        }
      ]
    }
  ]
}

最佳答案

$project$region.city.name 路径将为您提供一个数组数组,因为您有两层嵌套。要解决此问题,您可以使用 $reduce$concatArrays这会将您的最终结果展平为单个数组,请尝试:

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

关于javascript - 如何从嵌套数组中查找数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54491509/

相关文章:

Mongodb 找不到用户 "user@database"

mongodb - 计数提高性能

javascript - 是否有任何 Mongoose 验证库?

javascript - Mongoose 保存失败且没有错误

node.js - Mongoose 填充不填充嵌套数组数据

.net - 如何在网页上实现文件上传进度条?

javascript - '|| {}'是什么意思

javascript - 通过只有 1 个参数的递归保存计数变量

javascript - 如何防止位于 Javascript HREF 属性中的 XSS?

javascript - 如何以编程方式填充 Mongoose 模型字段?