node.js - 无法在 Mongoose/MongoDB 中使用坐标 $near 语句找到附近位置的结果

标签 node.js mongodb mongoose mongoose-populate

我正在尝试从特定点获取附近位置的结果。通过使用按 ID 查找的正常方式,会返回结果,但当我尝试使用坐标查找附近位置时,不会出现任何结果。我的代码中没有任何错误/警告,但也没有任何结果。我错过了什么?

模型架构

var locationSchema = new Schema({
    fb_location: String,
    coordinates:[]
});

var feed_postSchema = new Schema({
    content: String,
    location: [locationSchema],
    image: [{ type : String }],
    created_at: { type : Date, default: Date.now }
});

locationSchema.index({coordinates:'2dsphere'});

服务器.js

app.get('/test_radar',function(request,response){
    Feed_Post.find( 
    {
        'location.coordinates' :
        {
            $near : 
            {
                coordinates: [100,5]
            },
            $maxDistance: 100
        }
    },function(err,ret){
        console.log(response.json(ret));
    })
});

示例数据库数据

    "_id" : ObjectId("5620a3c2fde01a55065f4c3b"),
    "content" : "Test post",
    "created_at" : ISODate("2015-10-16T07:14:10.636Z"),
    "image" : [ ],
    "location" : [
            {
                    "fb_location" : "Malaysia",
                    "_id" : ObjectId("5620a3c2fde01a55065f4c3c"),
                    "coordinates" : [
                            100,
                            5
                    ]
            }
    ],
    "__v" : 0

注意:我确实将 $maxDistance 设置为 100 * 1000。仍然没有结果。

最佳答案

$near 运算符需要地理空间索引。

如果您想使用旧坐标将您的位置定义为一个点,您必须拥有 2D index created 。然后您将能够在您指定的语法中使用 $near 运算符。

您创建了 2dsphere 索引,因此您必须在查询中指定 GeoJSON 点:

Feed_Post.find( 
    {
        'location.coordinates' :
        {
            $geometry: {
                 type: "Point" ,
                 coordinates: [ 100 , 5 ]
            },
            $maxDistance: 100
        }
    },function(err,ret){
        console.log(response.json(ret));
    })

检查$near定义。

关于node.js - 无法在 Mongoose/MongoDB 中使用坐标 $near 语句找到附近位置的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165218/

相关文章:

javascript - 使用 Javascript 闭包完成处理程序的 Parse.com 查询查找不显示结果

node.js - Mongoose 模式和集合

Mongodb聚合嵌套子文档

mongodb - 如何在 Mongoose 中使用 "save"函数更新子文档?

javascript - 将语言 (ISO 639) 存储为数字

javascript - 如何修复JS写入文件时出现 "Unexpected Token :"错误

javascript - 有没有办法在 Javascript 中进行下一次迭代之前等待计算

node.js - 路由后的 Node Express 4 中间件

javascript - 在 Mongoose 的 forEach 循环中添加属性

node.js - 将 Mongoose 模型包含到包含在 node.js 文件中的单个 js 中?