使用MongoDB 版本 2.4.4,我有一个包含配置文件文档的配置文件集合。我有以下查询:
Query: { "loc" : { "$near" : [ 32.08290052711715 , 34.80888522811172] , "$maxDistance" : 0.0089992800575954}}
Fields: { "friendsCount" : 1 , "tappsCount" : 1 , "imageUrl" : 1 , "likesCount" : 1 , "lastActiveTime" : 1 , "smallImageUrl" : 1 , "loc" : 1 , "pid" : 1 , "firstName" : 1}
Sort: { "lastActiveTime" : -1}
限于 100 个文档。
loc - 包含键 (lat,lon) 的嵌入文档
我得到了例外:
org.springframework.data.mongodb.UncategorizedMongoDbException:sort() 的数据太多,没有索引。添加索引或指定较小的限制;
正如例外中所述,当我将限制缩小到 50 时它可以工作..但这不是我的选择。
我在配置文件文档中有以下 2 个相关索引:
{'loc':'2d'}
{'lastActiveTime':-1}
我也尝试过如下复合索引,但没有成功。
{'loc':'2d', 'lastActiveTime':-1}
这是示例文档(带有相关键):
{
"_id" : "5d5085601208aa918bea3c1ede31374d",
"gender" : "female",
"isCreated" : true,
"lastActiveTime" : ISODate("2013-04-08T11:30:56.615Z"),
"loc" : {
"lat" : 32.082230499955806,
"lon" : 34.813542940344945,
"locTime" : NumberLong(0)
}
}
配置文件中还有其他字段.. 基本上平均配置文件大小为 0.5 MB
,如果我错了,请纠正我,但如果我只指定相关的响应字段(就像我一样)
,这不是问题的原因。
不知道它是否有帮助,但是当我将限制大小缩小到 50 并且查询成功时
,我有以下解释信息(通过 MongoVUE 客户端)
cursor : GeoSearchCursor
isMultyKey : False
n : 50
nscannedObjects : 50
nscanned : 50
nscannedObjectsAllPlans : 50
nscannedAllPlans : 50
scanAndOrder : True
indexOnly : False
nYields : 0
nChunkSkips : 0
millis : 10
indexBounds :
这对我来说是一个障碍,我会感谢你的帮助,我做错了什么?如何使查询滚动到所需的限制大小?