nodejs:javascript数组问题

时间:2016-05-06 05:34:37

标签: javascript node.js mongoose

我有这个node.js应用程序,它使用mongoose从mongodb检索地铁数据,在我得到数据后,我会将其传递给sphere-knn来计算最近的点数。奇怪的事情发生在var lookup = sphereKnn(d1);如果我通过d1这是硬编码数组,代码将起作用,如果我通过从mongodb检索到的data,它就会赢得&#t; t完全工作,并返回空数组。

JSON.stringify(data) == JSON.stringify(d1)将打印trueArray.isArray也会为trued1打印dataconsole.log会显示变量data内有数据。

我对代码的行为感到困惑。我来自.net和node.js的新手。我在这里想念任何重要的概念吗?

mrtStop.find({}, {_id:0}, function(err, data){
  if(err){
    return res.json(err);
  }

  // data returned from mongodb, get first one
  data = data.slice(0,1);

  // hard coded data
  var d1 = [{"id":"EW6",
            "name":"EXAMPLE MRT STATION",
            "lat":1.3210355412,
            "lon":103.9129310102,
            "__v":0}];

  console.log(JSON.stringify(data));
  console.log(JSON.stringify(d1));
  // print true
  console.log(JSON.stringify(data) == JSON.stringify(d1));

  // d1 works, but data won't work
  // var lookup = sphereKnn(d1);
  var lookup = sphereKnn(data);

  var points = lookup(req.query.lat, req.query.lon, maxNum);

  res.json(points);
});

1 个答案:

答案 0 :(得分:2)

使用Query.lean()

tldr; mongoose 返回 mongoose-doc对象,它有很多原型,当你依靠它时,它会返回 plain js对象

//side note: you could also remove `__v` property {_id: 0, __v:0}
mrtStop.find({}, {_id:0}).lean().exec(function(err, data){
  if(err){
    return res.json(err);
  }
  var lookup = sphereKnn(data);
  var points = lookup(req.query.lat, req.query.lon, maxNum);
  res.json(points);
});