【问题标题】:Extract a value out of mongoose find() query从 mongoose find() 查询中提取一个值
【发布时间】:2018-12-22 13:57:10
【问题描述】:

在 find ("-_id services.location") 的 mongoose 查询中,stringifying 的输出是:

[
   {
      "services":[
         {
            "location":[
               17.4374614,
               78.7482878
            ]
         },
         {
            "location":[
               17.4020637,
               78.18400519324596
            ]
         },
         {
            "location":[
               17.56208737,
               78.284005186526
            ]
         },
         {
            "location":[
               17.5620637,
               78.3240051999554
            ]
         }
      ]
   }
]

有什么方法可以让我从我得到的输出中访问每个单独的位置值,例如(17.4374614、78.7482878、17.4020637....)。

我的架构如下:-

var serviceSchema = new mongoose.Schema({
    location:[{type: Number}]
})

【问题讨论】:

  • 在下面查看我的答案,也试试我分享的链接。

标签: arrays node.js mongodb mongoose aggregation-framework


【解决方案1】:

您正在寻找的是 $reduce$concatArrays 运算符。

[
  {
    "$project": {
      "result": {
        "$reduce": {
          "input": "$services.location",
          "initialValue": [],
          "in": {
            "$concatArrays": [
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
]

See demo

【讨论】:

  • 感谢您的解决方法。有没有办法只将没有 _id 的结果值数组呈现到模板中。我只需要渲染结果数组的值
  • 很好的答案@styvane!为你+1!! @Drunken Lord 检查此链接我已更新他的查询以满足您的要求:mongoplayground.net/p/EKm7PBH7NTy
【解决方案2】:

更新了答案:

有没有办法只渲染没有 _id 的 loc 值数组 进入模板。我只需要渲染 loc 数组的值

您可以这样做:https://mongoplayground.net/p/VhrZKxg6OC1

db.collection.aggregate([
  {
    $unwind: "$services"
  },
  {
    $unwind: "$services.location"
  },
  {
    $project: {
      "_id": "$_id",
      "location": "$services.location"
    }
  },
  {
    $group: {
      _id: "_id",
      loc: {
        $push: "$location"
      }
    }
  },
  {
    $project: {
      "_id": 0,
      "locationArray": "$loc"
    }
  }
])

这将导致:

[
  {
    "locationArray": [
      17.4374614,
      78.7482878,
      17.4020637,
      78.18400519324597,
      17.56208737,
      78.284005186526,
      17.5620637,
      78.3240051999554
    ]
  }
]

希望它能解决您的问题。

【讨论】:

  • 感谢您的解决方法。有没有办法只将没有 _id 的 loc 值数组呈现到模板中。我只需要渲染 loc 数组的值。
  • 只需添加一个带有 _id:0 和 loc:”$loc” 的项目语句
  • 我已将项目声明更改为:- $project: { "_id": "0", "location": "$services.location", "loc":"$loc" } 然而查询的结果不是表单LOC:[17.4374614,78.7482878,178.748287,7840051932597,17.56208737,78.56208737,78.284005186526,178.28400519526,17.5620637,78.3240051999554]我想仅发送LOC的平面阵列值 span>
  • 太棒了!万分感谢! :)
猜你喜欢
  • 2019-09-22
  • 1970-01-01
  • 2021-03-03
  • 2015-03-06
  • 2017-12-18
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2019-08-25
相关资源
最近更新 更多