0

我正在 nodejs 中开发基于位置的应用程序。我正在使用
- mongodb v2.4.4
- 本机 nodejs mongodb 驱动程序(https://github.com/mongodb/node-mongodb-native
- nodejs 版本 0.10.0

我在一个集合的所有文档中都有地理空间索引(2dsphere)。字段是这样的:

{ "loc" : { "type" : "Point", "coordinates" : [  -122.5418261,  38.0047656 ] } }

该系列的名称是“场地”

要根据与特定点的接近程度查询数据,我使用以下代码:

var query = {
            geoNear:"Venue",
            near : { type : "Point" ,
                coordinates: [ searchParams.longitude, searchParams.latitude ] } ,
            spherical : true,
            limit: 10000,
            maxDistance : searchParams.radius
        };


mongodbconnection.command(query, function(error, data){

});

地理空间查询工作正常。但是我想通过使用像 skip() 和 limit() 这样的游标对象方法来进一步过滤结果。但是回调中返回的数据对象不是游标。那么如何使用 skip() 和 limit() ?

4

2 回答 2

0

请使用.find而不是直接执行.command到数据库:

db.collection('Venue', function(err, venues) {
  // you might want to cache collection handler after
  if (!err) {
    venues.find({ $near: { $geometry: { type: 'Point', coordinates: [ searchParams.longitude, searchParams.latitude ] }, $maxDistance: searchParams.radius }, { limit: 32 }).toArray(function(err, data) {
      if (!err) {
        console.log(data);
      } else {
        console.error(err);
      }
    });
  } else {
    console.error(err);
  }
});

您可以像上面的示例中那样包含光标选项(作为对象),或者在您习惯的命令行中包含光标扩展。

于 2013-09-13T14:36:01.603 回答
0
    center = [-122, 37];
    radius = 80;
    var query = {"loc" : {"$within" : {"$center" : [center, radius]}}};


    collection.find(query).skip(2000).toArray(function(err,data){


        console.log(data.length);

    });

礼貌:MongoDB 地理空间查询计数问题(始终为 100)

于 2013-08-31T10:28:16.093 回答