Mongodb排序异常 - 没有索引的sort()数据太多

时间:2013-07-16 14:50:08

标签: mongodb exception sorting indexing

使用 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 : 


对我来说这是一个阻碍者,我将感激你的帮助,我做错了什么?如何使查询卷具有所需的限制大小?

1 个答案:

答案 0 :(得分:1)

尝试创建复合索引而不是两个索引。

db.collection.ensureIndex( { 'loc':'2d','lastActiveTime':-1 } )

您还可以建议查询使用哪个索引:

db.collection.find(...).hint('myIndexName')