Mongoose/MongoDb获取错误geoNear不是函数 [英] Mongoose/MongoDb getting error geoNear is not a function

查看:130
本文介绍了Mongoose/MongoDb获取错误geoNear不是函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的控制器文件locations.js

var mongoose = require('mongoose');
var Loc = mongoose.model('location');

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: 1000
  };

  Loc.geoNear(point, geoOptions, function (err, results, stats) {
    console.log(results);
  });
};

我的模型文件的locations.js

var mongoose = require('mongoose');

var reviewSchema = new mongoose.Schema({
    author: String,
    rating: {
        type: Number,
        required: true,
        min: 0,
        max: 5
    },
    reviewText: String,
    createdOn: {
        type: Date,
        "default": Date.now
    }
});

var openingTimeSchema = new mongoose.Schema({
    days: {
        type: String,
        required: true
    },
    opening: String,
    closing: String,
    closed: {
        type: Boolean,
        required: true
    }
});

var locationSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    address: String,
    rating: {
        type: Number,
        "default": 0,
        min: 0,
        max: 5
    },
    facilities: [String],
    // Always store coordinates longitude, latitude order.
    coords: {
        type: [Number],
        index: '2dsphere'
    },
    openingTimes: [openingTimeSchema],
    reviews: [reviewSchema]
});

mongoose.model('location', locationSchema, 'locations');

每当我运行 http://localhost:3000/api/locations?lng = -0.9690884& lat = 51.455041 我收到错误geoNear不是函数

Whenever I run http://localhost:3000/api/locations?lng=-0.9690884&lat=51.455041 I get error geoNear is not a function

TypeError:Loc.geoNear不是函数 在module.exports.locationsListByDistance(/home/shackers/Projects/mean/loc8r/app_api/controllers/locations.js:51:7) 在Layer.handle [作为handle_request](/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/layer.js:95:5) 在下一个(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/route.js:137:13) 在Route.dispatch(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/route.js:112:3) 在Layer.handle [作为handle_request](/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/layer.js:95:5) 在/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:281:22 在Function.process_params(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:335:12) 在下一个(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:275:10) 在Function.handle(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:174:3) 在路由器上(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:47:12) 在Layer.handle [作为handle_request](/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/layer.js:95:5) 在trim_prefix(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:317:13) 在/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:284:7 在Function.process_params(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:335:12) 在下一个(/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:275:10) 在/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:635:15

TypeError: Loc.geoNear is not a function at module.exports.locationsListByDistance (/home/shackers/Projects/mean/loc8r/app_api/controllers/locations.js:51:7) at Layer.handle [as handle_request] (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/layer.js:95:5) at next (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/route.js:137:13) at Route.dispatch (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/layer.js:95:5) at /home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:281:22 at Function.process_params (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:335:12) at next (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:275:10) at Function.handle (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:174:3) at router (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:47:12) at Layer.handle [as handle_request] (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:317:13) at /home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:335:12) at next (/home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:275:10) at /home/shackers/Projects/mean/loc8r/node_modules/express/lib/router/index.js:635:15

这是我正在使用的依赖项版本:

  • 节点:8.9.3 npm:5.5.1表达:4.15.5猫鼬:5.0.0 mongoDb:3.6.1
  • node : 8.9.3 npm : 5.5.1 express : 4.15.5 mongoose : 5.0.0 mongoDb : 3.6.1

推荐答案

router.get('/', () => {
    Loc.aggregate([
        {
            $geoNear: {
                near: 'Point',
                distanceField: "dist.calculated",
                maxDistance: 100000,
                spherical: true                
            }
        }
    ]).then(function(err, results, next){
        res.send();
    }).catch(next);
});

参考:- https://docs.mongodb.com/manual/reference/命令/geoNear/

这篇关于Mongoose/MongoDb获取错误geoNear不是函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆