nodejs:javascript数组问题

我有这个node.js应用程序,它使用mongoose从mongodb中获取地铁数据,获取数据后,我将它传递给sphere-knn来计算最近的点。 奇怪的事情发生在var lookup = sphereKnn(d1); 如果我传递的是硬编码数组d1 ,代码将工作,如果我传递从mongodb中检索的data ,它将不会工作,并返回空数组作为结果。

JSON.stringify(data) == JSON.stringify(d1)会打印trueArray.isArray也会打印出d1data两个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); }); 

使用Query.lean()

tldr; mongoose返回mongoose-doc对象 ,它有许多原型,当你靠它的时候,它会返回普通的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); });