【问题标题】:Mongo DB sorting exception - too much data for sort() with no indexMongodb 排序异常 - 没有索引的 sort() 数据过多
【发布时间】:2013-07-14 19:56:56
【问题描述】:

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


这对我来说是一个障碍,我会感谢你的帮助,我做错了什么?如何使查询滚动到所需的限制大小?

【问题讨论】:

  • 50份文件需要多长时间?
  • 你可以在解释中看到它说 10 毫秒,非常快。
  • 哦,在图片中。您能否偶然摆脱图像中的所有空白?相关部分在 SO 中显示为 30px 左右。更好的是,只需将数据复制到问题中。此外,对于高性能网站来说,10 毫秒并不是很快,即每秒只有 100 个请求,但也许这对您来说是可以接受的。
  • 你去编辑问题
  • 太棒了,谢谢。我不知道答案,但希望这对于比我更熟悉 Mongo 的人来说更明显。

标签: mongodb exception sorting indexing


【解决方案1】:

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

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

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

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

【讨论】:

  • 已经尝试过复合索引...正如我在问题中提到的那样。在提示中建议哪个索引?我需要索引来操作查询我可以建议两者吗?
  • 只有一个复合索引可供建议。
  • 尝试创建复合索引并提示它...但没有成功
猜你喜欢
  • 2011-05-22
  • 1970-01-01
  • 2013-11-18
  • 2020-02-07
  • 2018-08-11
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多