2016-05-06 2 views
1

У меня есть это приложение node.js, которое извлекает данные из метро из mongodb, используя mongoose, и после получения данных я передам его sphere-knn для вычисления ближайших точек. Странная вещь случается в var lookup = sphereKnn(d1);, если я передаю d1, который является жестко закодированным массивом, код будет работать, если я передам data, который извлекается из mongodb, он вообще не работает и возвращает пустой массив в качестве результата.nodejs: проблема с массивом javascript

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

Вы можете показать все свои результаты в журнале? –

+0

Вы пробовали 'sphereKnn [данные [0]]'? –

+0

console.log данные и дайте мне знать? –

ответ

2

Использование Query.lean()

tldr;мангуст возвращает мангуст-ДОК объект, который имеет много прототипов, когда вы наклоняетесь, он будет возвращать скольжения 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); 
}); 
Смежные вопросы