无法将Mongoose查找结果转换为数组

时间:2018-07-12 18:13:28

标签: node.js mongodb mongoose handlebars.js

我希望将此代码的结果转换为数组。

>User
  .find()
  .select("-_id services.location ")
  .lean()
  .exec(function(err,users){

    if (err) {

      console.log("Error Finding the users")

    } else {

      users=JSON.stringify(users);

      console.log("new:-",users)

      console.log(users)

      res.render('allroads1',{users:users})

    }

   })

我得到的结果是:-

    [{"services":[{"location":[17.4374614,78.4482878]},{"location": [17.4020637,78.48400519999996]}]}]

我希望结果的格式为:-

    [
      "17.4374614",
      "78.4482878",
      "17.4020637",
      "78.484005199996"
    ]

我的架构类似于数字数组:-位置:[{type:Number}]。我正在使用把手作为模板引擎。 ##

1 个答案:

答案 0 :(得分:0)

如果将初始响应格式化为数组,则以下代码应该可以帮助您完成所需的工作,本质上,我们使用map来获取值,然后进行合并和缩小以简化数组。

var x = [[{"services":[{"location":[17.4374614,78.4482878]},{"location": [17.4020637,78.48400519999996]}]}]
        ,[{"services":[{"location":[17.4374614,78.4482878]},{"location":[17.4020637,78.48400519999996]}]}]
].map(function(obj) {
    return obj[0]['services'].map(function(obj){
        return obj['location']
    });
}).reduce(function(acc, val){
    return acc.concat(val);
}).reduce(function(acc, val) {
    return acc.concat(val);
});
console.log(x);

给予

[ 17.4374614,
  78.4482878,
  17.4020637,
  78.48400519999996,
  17.4374614,
  78.4482878,
  17.4020637,
  78.48400519999996 ]

因此不包含reduce和catenate:

var x = [[{"services":[{"location":[17.4374614,78.4482878]},{"location": [17.4020637,78.48400519999996]}]}]
        ,[{"services":[{"location":[17.4374614,78.4482878]},{"location":[17.4020637,78.48400519999996]}]}]
].map(function(obj) {
    return obj[0]['services'].map(function(obj){
        return obj['location']
    });
});
console.log(x);

你得到

[ [ [ 17.4374614, 78.4482878 ],
    [ 17.4020637, 78.48400519999996 ] ],
  [ [ 17.4374614, 78.4482878 ],
    [ 17.4020637, 78.48400519999996 ] ] ]

您得到的响应非常混乱,对象数组由两个数组组成,等等,但是使用map从对象数组中删除,并且由于还有一个大小为1的数组,这就是为什么存在obj [0]的原因