首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB geoNear不是为某些坐标工作,而是为另一些坐标工作

MongoDB geoNear不是为某些坐标工作,而是为另一些坐标工作
EN

Stack Overflow用户
提问于 2021-03-13 07:57:00
回答 1查看 653关注 0票数 2

我正在使用mongoDB和Node.js驱动程序为MongoDB开发一个API。其中一条路由获取坐标并调用聚合管道,该管道返回按紧密性和许多其他因素排序的结果。管道第一步的代码是:

代码语言:javascript
运行
复制
{$geoNear:{
  near:{
     type: "Point",
     coordinates: [lat, long]
  },
  spherical:true,
  distanceField:"distance"
}},

这很好,直到突然之间,它没有。现在,它工作在一些坐标,而对另一些,它提供错误的MongoError: invalid argument in geo near query: type。它适用于{lat:0, long:0}{lat:40.7411, long:-73.9897}{lat:46.68758191106798, long:2.8106467331441767},但给出了{lat:37.785834, long:-122.406417}{lat:47.643628614308675, long:-122.34560056016635}的错误。我能找到的唯一模式是它讨厌西海岸的坐标。我已经证实2d-球形指数仍然存在于数据中。我试过把球设为假的。我甚至尝试删除所有的数据,即使是在一个空的集合中,我也会得到相同的行为。我真的很困惑,为什么geonear的论点对某些观点是有效的,而对另一些观点则是无效的。

编辑:我现在已经注释掉了所有的东西,除了下面的代码,我仍然得到了相同的行为,其中一些坐标工作,而另一些给MongoError: invalid argument in geo near query: type

代码语言:javascript
运行
复制
router.post("/", asyncHandler(async (req, res, next) => {
    const {lat, long} = req.body;
    const errors = [];
    if(typeof(lat) !== "number" || Math.abs(lat) > 90) errors.push("Lat is invalid");
    if(typeof(long) !== "number" || Math.abs(long) > 180) errors.push("Long is invalid");
    if(errors.length) return next(errors);
    const feed = await req.app.locals.db.collection("posts").aggregate(
        [
            {$geoNear:{
                near:{
                    type: "Point",
                    coordinates: [lat, long]
                },
                spherical:true,
                distanceField:"distance"
            }},
        ]
    );
    const feedArr = await feed.toArray();
    res.json(feedArr);
}));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-13 08:45:01

请参阅GeoJSON对象

如果指定纬度和经度坐标,请先列出经度,然后列出纬度

你做了coordinates: [lat, long]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66611269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档