mongodb中的find()方法返回未定义的

mongodb中的find()方法返回未定义的,mongodb,geospatial,geojson,Mongodb,Geospatial,Geojson,我正在尝试创建一条路径,以检索具有附近位置坐标的记录。 我检查了日志,发现“docs”值未定义。我怎么了 router.get('/userlist/:lat/:lng', function (req, res) { var db = req.db; var lat = req.params.lat, lng = req.params.lng; console.log("lat "+lat); console.log("lng "+lng); var co

我正在尝试创建一条路径,以检索具有附近位置坐标的记录。 我检查了日志,发现“docs”值未定义。我怎么了

router.get('/userlist/:lat/:lng', function (req, res) {
    var db = req.db;
    var lat = req.params.lat, lng = req.params.lng;
    console.log("lat "+lat);
    console.log("lng "+lng);
    var collection = db.get('userlist');
    collection.find({
        "location": {
         $nearSphere: {
           $geometry: {
              type: "Point" ,
              coordinates: [ lat , lng ]
           }
         }
       }
    }, {}, function (e, docs) {      
        docs = JSON.stringify(docs);
        console.log("docs "+docs);
        res.send(docs);        
    });
});
我正在存储JSON数据,如下面的屏幕截图所示


位置应以以下格式存储:-

"location" : {
        "type" : "Point",
        "coordinates" : [ 
            -70.845654, 
            42.146249
        ]
    }

geojson点应该是一个对象而不是一个数组。

正如@Webdev所说,坐标存储为字符串,不应为空。但我无法使用mongoose以数字形式存储它们。因此,我在find查询中将纬度和经度解析为float,它可以正常工作。

检查您是否犯了经典错误,将纬度放在坐标数组的第一位,它总是[lng,lat]在里面coordinates@Sarfraaz是的,我把它按正确的顺序排列了,只有
find
返回游标。使用
.toArray()
提取文档。如果有错误,也要检查错误部分<代码>集合.find({“位置”){$nearSphere:{$geometry:{type:“Point”,坐标:[lat,lng]}}}}}},{}.toArray(函数(e,docs){docs=JSON.stringify(docs);console.log(“docs”+docs);res.send(docs);})我不熟悉geojson。我在这里看到的问题是,您试图在找到收藏之前返回。你需要打同步电话。这就是你想要的吗?@ash我查了一下,发现toArray()在猫鼬中不可用。我使用的是Mongoose,我是这样存储的:'位置':{类型:“点”,坐标:[$('input#inputUserLocationLng').val(),$('input#inputUserLocationLat').val()}格式不应该是问题。lat long值将作为字符串存储在数据中。它们不应该像我的示例中那样用双引号括起来。它们是从表单中检索的。我也做了同样的分析,但在问题所附的数据中,它们显示为stringsit,这是猫鼬的问题