Mongodb 对辅助字段进行排序和限制的地理空间查询
我正在尝试获取最近在附近地区创建的3个帐户。 因此,我尝试使用地理空间查询与排序(在:-1处创建)和限制(3)相结合 基本地理空间查询:Mongodb 对辅助字段进行排序和限制的地理空间查询,mongodb,sorting,limit,geospatial,Mongodb,Sorting,Limit,Geospatial,我正在尝试获取最近在附近地区创建的3个帐户。 因此,我尝试使用地理空间查询与排序(在:-1处创建)和限制(3)相结合 基本地理空间查询: db.users.find({"loc": {$near: [28.41, 77.04], $maxDistance:0.05, $uniqueDocs: true}}) { "created_at" : ISODate("2013-12-11T07:58:34.927Z"), "name" : "A" } { "created_at" : ISODate("
db.users.find({"loc": {$near: [28.41, 77.04], $maxDistance:0.05, $uniqueDocs: true}})
{ "created_at" : ISODate("2013-12-11T07:58:34.927Z"), "name" : "A" }
{ "created_at" : ISODate("2014-03-08T10:00:17.921Z"), "name" : "B" }
{ "created_at" : ISODate("2014-03-13T08:28:46.285Z"), "name" : "C" }
{ "created_at" : ISODate("2014-03-05T12:01:34.199Z"), "name" : "D" }
{ "created_at" : ISODate("2014-03-13T08:16:22.913Z"), "name" : "E" }
{ "created_at" : ISODate("2014-03-13T10:23:02.660Z"), "name" : "F" }
将排序添加到它会得到:
db.users.find({"loc": {$near: [28.41, 77.04], $maxDistance:0.05, $uniqueDocs: true}}).sort({created_at: -1})
{ "created_at" : ISODate("2014-03-13T10:23:02.660Z"), "name" : "F" }
{ "created_at" : ISODate("2014-03-13T08:28:46.285Z"), "name" : "C" }
{ "created_at" : ISODate("2014-03-13T08:16:22.913Z"), "name" : "E" }
{ "created_at" : ISODate("2014-03-08T10:00:17.921Z"), "name" : "B" }
{ "created_at" : ISODate("2014-03-05T12:01:34.199Z"), "name" : "D" }
{ "created_at" : ISODate("2013-12-11T07:58:34.927Z"), "name" : "A" }
最后加上一个限制:
db.users.find({"loc": {$near: [28.41, 77.04], $maxDistance:0.05, $uniqueDocs: true}}).sort({created_at: -1}).limit(3)
{ "created_at" : ISODate("2014-03-13T08:28:46.285Z"), "name" : "C" }
{ "created_at" : ISODate("2014-03-08T10:00:17.921Z"), "name" : "B" }
{ "created_at" : ISODate("2013-12-11T07:58:34.927Z"), "name" : "A" }
预期结果为[F,C,E](即第二个查询结果的前3个条目)。但是我得到的是[C,B,A],这是第一个查询结果的前3个条目(按创建时间排序)
因此,mongodb在执行排序操作之前先执行限制操作。有没有办法强制它在应用限制之前进行排序
提出了一个类似的问题,但查询本身存在一个问题。
此问题是否特定于“$near”查询?该查询已对距离最近的文档进行排序。因此,如果您有一个额外的sort()和limit(),则首先应用limit(),因为结果已经按距离排序
虽然我认为在地理空间查询中按“created_at”排序没有多大意义,但如果您仍然需要它,则只能通过编程方式进行排序。也就是说,对查询中的整个结果进行排序,并在客户端程序中应用限制。使用$GEOIN help是否也可以?与$near完全不同。它们不能互换使用。它们的用例完全不同。您可以在文档中阅读。我建议在您的客户机程序中对您描述的用例应用限制。我知道,但我的用例只需要按创建进行排序。地理空间查询只需要确保结果位于maxDistance范围内。所以我可以使用$geoinse而不是$near。谢谢,把你的答案标记为正确