具有位置条件的MongoDB分页

具有位置条件的MongoDB分页,mongodb,pagination,mongodb-query,aggregation-framework,geospatial,Mongodb,Pagination,Mongodb Query,Aggregation Framework,Geospatial,我想得到按字段排序的数据。比如说 db.Users.find().limit(200).sort({'rating': -1}).skip(0) 这是工作,我得到分类数据。并且可以使用分页 但是,如果添加条件.find({'location':{$near:[12,32],$maxDistance:10})排序无法正常工作 查询全文: db.Users.find({'location':{$near : [12,32], $maxDistance: 10}}).limit(200).sort(

我想得到按字段排序的数据。比如说

db.Users.find().limit(200).sort({'rating': -1}).skip(0)
这是工作,我得到分类数据。并且可以使用分页

但是,如果添加条件
.find({'location':{$near:[12,32],$maxDistance:10})
排序无法正常工作

查询全文:

db.Users.find({'location':{$near : [12,32], $maxDistance: 10}}).limit(200).sort({'rating': -1}).skip(0)
比如说

Whithout标准位置:

偏移量0

rating 100
rating 99
rating 98
rating 97
rating 96
rating 90
rating 89
rating 88
rating 87
rating 86
rating 100
rating 99
rating 98
rating 97
rating 96
rating 95
rating 94
rating 93
rating 92
rating 91
偏移量5

rating 95
rating 94
rating 93
rating 92
rating 91
rating 90
rating 89
rating 88
rating 87
rating 86
偏移量10

rating 100
rating 99
rating 98
rating 97
rating 96
rating 90
rating 89
rating 88
rating 87
rating 86
rating 100
rating 99
rating 98
rating 97
rating 96
rating 95
rating 94
rating 93
rating 92
rating 91
带标准位置

偏移量0

rating 100
rating 99
rating 98
rating 97
rating 96
rating 90
rating 89
rating 88
rating 87
rating 86
rating 100
rating 99
rating 98
rating 97
rating 96
rating 95
rating 94
rating 93
rating 92
rating 91
偏移量5

rating 95
rating 94
rating 93
rating 92
rating 91
rating 90
rating 89
rating 88
rating 87
rating 86
偏移量10

rating 100
rating 99
rating 98
rating 97
rating 96
rating 90
rating 89
rating 88
rating 87
rating 86
rating 100
rating 99
rating 98
rating 97
rating 96
rating 95
rating 94
rating 93
rating 92
rating 91

有什么问题吗?我可以在MongoDB中使用位置条件分页吗?

聚合框架有一种方法可以使用管道阶段来实现这一点。基本上,它将“投影”一个“距离”字段,然后您可以在组合排序中使用该字段:

db.collection.aggregate([
{“$geoNear”:{
“近”:[12,32],
“距离字段”:“距离”,
“最大距离”:10
}},
{“$sort”:{“距离”:1,“评级”-1}
{“$skip”:0},
{“$limit”:25}
])
应该可以,但是“跳过”和“限制”在大的跳过上并不是真正有效的。如果您不需要“页面编号”就可以离开,只想继续前进,那么请尝试另一种技术

基本原则是跟踪为页面找到的最后一个距离值,以及来自该页面或之前几个页面的文档的
\u id
值,然后可以使用操作符过滤掉这些值:

db.collection.aggregate([
{“$geoNear”:{
“近”:[12,32],
“距离字段”:“距离”,
“最大距离”:10,
“心灵距离”:最后一次看到的坚持价值,
“查询”:{
“_id”:{“$nin”:seenIds},
“评级”:{“$lte”:lastSeenRatingValue}
},
“数字”:25
}},
{“$sort”:{“距离”:1,“评级”:-1}
])
从本质上说,这会好得多,但它不会帮助你跳转到“第25页”例如。不是没有更多的努力来解决这个问题