使用geoNear时出现node-mongodb-native错误

时间:2014-07-09 21:48:36

标签: node.js mongodb express node-mongodb-native

我到处寻找,根本无法解决这个问题......我可以让它在mongo shell中工作,但不能在我的应用程序中工作。这是代码。我可以在这里工作......(使用MongoDB shell)

db.runCommand({geoNear: 'prints', near: {type:"Point",coordinates:[30.3,-40]},       spherical:true})

但它在我的应用程序中不起作用(使用本机mongodb驱动程序)

db.prints.geoNear({type: 'Point',coordinates:[30.3,-40]}, {spherical:true}, function(err, docs){
    if(err){res.json(400, err);}
    else{res.json(200, docs);}
});

我不知道问题是什么?我非常确定我的索引是正确的(因为它在我使用Mongo Shell direclty时有效)但我无法使用本机节点驱动程序...我一直得到一个非常神秘的错误...

{
name: "MongoError"
errmsg: "exception: 'near' field must be point"
code: 17304
ok: 0
}

当我看到错误时,它已被列出,但我出于某种原因获得了404页面???任何帮助都会非常感激,我已经在这墙上撞了一天......

更新:我通过解决方法得到了这个...通过强制命令通过本机驱动程序直接到Mongo ...但我仍然感到困惑的是为什么本机驱动程序没有' t支持geoJSON - 而geoNear命令正在强制传统坐标系......

mongo.db.command({
    geoNear: 'prints', near: {"type":"Point","coordinates":[30.3,-40]}, spherical: true, num: 10000,   maxDistance: req.body.radius
    }, function(err, docs){
    if(err){res.json(400, err);}
    else{res.json(200, docs);}
});

对本机驱动程序团队的功能请求?

1 个答案:

答案 0 :(得分:2)

我相信你在MongoDB的native node.js驱动程序中调用geonear的语法是不正确的。使用您的示例,它应该是这样的:

db.prints.geoNear(30.3,-40, {spherical:true}, function(err, docs){
    if(err){res.json(400, err);}
    else{res.json(200, docs);}
});

有关geonear()方法调用选项的更多详细信息,请参阅文档:

http://mongodb.github.io/node-mongodb-native/api-generated/collection.html