我有这个node.js应用程序,它使用mongoose从mongodb检索地铁数据,在我得到数据后,我会将其传递给sphere-knn来计算最近的点数。奇怪的事情发生在var lookup = sphereKnn(d1);
如果我通过d1
这是硬编码数组,代码将起作用,如果我通过从mongodb检索到的data
,它就会赢得&#t; t完全工作,并返回空数组。
JSON.stringify(data) == JSON.stringify(d1)
将打印true
,Array.isArray
也会为true
和d1
打印data
,console.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);
});
答案 0 :(得分:2)
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);
});