Node.js 使用mongoose时geoNear()未按预期工作

Node.js 使用mongoose时geoNear()未按预期工作,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用mongodb和mongoose作为我应用程序的ODM。我有一份文件记录了一家餐馆的位置。模型(架构)如下所示: var locationSchema = new mongoose.Schema({ name: {type:String, required:true}, address: String, coords: {type:[Number], index:'2dsphere', required:true}, }); 这是我的样本数据: "_i

我正在使用mongodb和mongoose作为我应用程序的ODM。我有一份文件记录了一家餐馆的位置。模型(架构)如下所示:

var locationSchema = new mongoose.Schema({
    name: {type:String, required:true},
    address: String,
    coords: {type:[Number], index:'2dsphere', required:true},
});
这是我的样本数据:

    "_id" : ObjectId("56b39d9673ff055a098dee71"),
    "name" : "Holycow STEAKHOUSE",
    "address" : "somewhere",
    "coords" : [
        106.7999044,
        -6.2916982
    ]
然后我用猫鼬从离餐厅大约2公里的地方找到餐厅的位置。我从mongodb文档中了解到,我们必须在radiance和Distance乘数中提供maxDistance参数和地球半径,因此我将以下代码放入我的控制器中:

var point = {
        type: "Point",
        coordinates: [106.8047355, -6.2875187] // the test data, approximately 2 km from the restaurant
    }

    var geoOptions = {
        spherical: true,
        num: 10,
        maxDistance: 5 / 6371 , // i set maximum distance to 5 km. to make sure I found the place.
        distanceMultiplier: 6371
    }

Loc.geoNear(point, geoOptions, function(err, results, stats){
            var locations = [];
            if(err){
                console.log(err);
                sendJsonResponse(res, 404, err);
            } else {
                results.forEach(function(doc){
                    locations.push({
                       distance: doc.dis,
                       name: doc.obj.name,
                       address: doc.obj.address,
                       _id: doc.obj._id
                   });
               });
               sendJsonResponse(res, 200, locations);     
            } 
        });
但它没能找到那家餐馆。我已经看了两个小时的文件,但仍然没有任何线索。我的代码有什么问题吗?

试试这个:

var geoOptions = {
    spherical: true,
    num: 10,
    maxDistance: 5 * 1000 , // Convert kilometers to meters
}
我想我们在读同一本书。您的代码很熟悉,并且 我也遇到了同样的问题

您的代码工作不正常,因为您假定
maxDistace
正在使用单位弧度。但是没有,
naxDistance
使用的是仪表。您还需要删除
distanceMultiplier
,因为它会将
maxDistance
转换为弧度,而弧度不是正确的单位


试试这个链接:

同一本书,这帮了我的忙。谢谢