我正在开发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()?
答案 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);
});
答案 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);
}
});
您可以将光标选项包含在上面的示例中(作为对象),或者像在命令行中一样包含光标扩展名。