【发布时间】:2018-08-11 11:31:41
【问题描述】:
所以我正在关注一本关于构建 MEAN 堆栈应用程序的书。最初我有这段代码,但得到了 TypeError: Loc.geoNear is not a function
module.exports.locationsListByDistance = function (req, res) {
var lng = parseFloat(req.query.lng);
var lat = parseFloat(req.query.lat);
var point = {
type: "Point",
coordinates: [lng, lat]
};
var geoOptions = {
spherical: true,
maxDistance: theEarth.getRadsFromDistance(20),
num: 10
};
Loc.geoNear(point, geoOptions, function(err, results, stats) {
var locations = [];
results.forEach(function(doc) {
locations.push({
distance: theEarth.getDistanceFromRads(doc.dis),
name: doc.obj.name,
address: doc.obj.address,
rating: doc.obj.rating,
facilities: doc.obj.facilities,
_id: doc.obj._id
});
});
sendJsonResponse(res, 200, locations);
});
};
然后我看到了这个页面Mongoose/MongoDb getting error geoNear is not a function 并使用了 WernerCD 提供的代码:
module.exports.locationsListByDistance = function(req, res) {
console.log('locationsListByDistance:');
var lng = parseFloat(req.query.lng);
var lat = parseFloat(req.query.lat);
var maxDistance = 10000;
var point = {
type: "Point",
coordinates: [lng, lat]
};
console.log('point: ' + point)
var geoOptions = {
spherical: true,
maxDistance: theEarth.getRadsFromDistance(maxDistance),
num: 10
};
console.log('geoOptions: ' + geoOptions);
if ((!lng && lng!==0) || (!lat && lat!==0) || ! maxDistance) {
console.log('locationsListByDistance missing params');
sendJsonResponse(res, 404, {
"message": "lng, lat and maxDistance query parameters are all required"
});
return;
} else {
console.log('locationsListByDistance running...');
Loc.aggregate(
[{
'$geoNear': {
'near': point,
'spherical': true,
'distanceField': 'dist.calculated',
'maxDistance': maxDistance
}
}],
function(err, results) {
if (err) {
sendJsonResponse(res, 404, err);
} else {
locations = buildLocationList(req, res, results);
sendJsonResponse(res, 200, locations);
}
}
)
};
};
var buildLocationList = function(req, res, results) {
console.log('buildLocationList:');
var locations = [];
results.forEach(function(doc) {
locations.push({
distance: doc.dist.calculated,
name: doc.name,
address: doc.address,
rating: doc.rating,
facilities: doc.facilities,
_id: doc._id
});
});
return locations;
};
我从上面的代码和帖子中唯一改变的是maxDistance。现在所有输出都是 [] 表示一个空数组。我想知道我在哪里搞砸了。感谢您的任何帮助和建议。
最终输出应如下所示:
[
{
"distance": 0,
"name": "Rathaus",
"address": "Markt",
"rating": 0,
"facilities": [
"museum"
],
"_id": "5a9366517775811a449e503e"
},
{
"distance": 61.77676881925853,
"name": "Haus Löwenstein",
"address": "",
"rating": 0,
"facilities": [
"museum"
],
"_id": "5a9366517775811a449e5045"
},
{
"distance": 63.03445976427102,
"name": "Goldener Schwan",
"address": "Markt 37",
"rating": 0,
"facilities": [
"restaurant"
],
"_id": "5a9366517775811a449e5052"
},
{
"distance": 66.60375653163021,
"name": "Klein Printenbäckerei",
"address": "Krämerstraße 12",
"rating": 0,
"facilities": [
"supermarket"
],
"_id": "5a9366517775811a449e504d"
},
{
"distance": 74.91278395082011,
"name": "Couven-Museum",
"address": "Hühnermarkt 17",
"rating": 0,
"facilities": [
"museum"
],
"_id": "5a9366517775811a449e5042"
},
{
"distance": 132.2939512054143,
"name": "Cathedral Treasury",
"address": "Johannes-Paul-II.-Straße",
"rating": 0,
"facilities": [
"museum"
],
"_id": "5a9366517775811a449e503d"
},
{
"distance": 152.11867357742042,
"name": "Aachen Cathedral",
"address": "Domhof 1",
"rating": 0,
"facilities": [
"museum"
],
"_id": "5a9366517775811a449e503c"
},
{
"distance": 155.92015153163268,
"name": "International Newspaper Museum",
"address": "Pontstraße 13",
"rating": 0,
"facilities": [
"museum"
],
"_id": "5a9366517775811a449e5040"
},
{
"distance": 175.0857109968383,
"name": "Nobis Printen",
"address": "Münsterplatz 3",
"rating": 0,
"facilities": [
"supermarket"
],
"_id": "5a9366517775811a449e504c"
},
{
"distance": 179.32348875834543,
"name": "Grashaus",
"address": "Fischmarkt",
"rating": 0,
"facilities": [
"museum"
],
"_id": "5a9366517775811a449e5044"
},
{
"distance": 189.8675948747873,
"name": "Maranello",
"address": "Pontstraße 23",
"rating": 0,
"facilities": [
"restaurant"
],
"_id": "5a9366517775811a449e5057"
},
{
"distance": 198.2239741555585,
"name": "Carlos I",
"address": "Rennbahn 1",
"rating": 0,
"facilities": [
"restaurant"
],
"_id": "5a9366517775811a449e5055"
}
]
【问题讨论】:
-
我修好了,数组没有填充,因为我的坐标离位置太远了。
-
请将您的修复作为答案发布,以便每个人都可以从中受益
标签: arrays node.js mongodb express mongoose