在节点中使用游标方法和mongodb命令

时间:2013-08-31 10:25:25

标签: node.js mongodb cursor geospatial node-mongodb-native

我正在开发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 ] } }

该系列的名称为'Venue'

要根据与特定点的距离来查询数据,我使用的是以下代码:

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()?

2 个答案:

答案 0 :(得分: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 Geospatial Query Count Issue (Always 100)

答案 1 :(得分: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);
  }
});

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