【问题标题】:Cannot sort without index mongo query没有索引 mongo 查询无法排序
【发布时间】:2013-03-30 08:56:18
【问题描述】:

我有以下疑问:

{ "loc" : { "$near" : [ 32.08 , 34.779] , "$maxDistance" : 0.04499640028797696} , "isCreated" : true , "loc.venueName" :  null}

排序方式:

{"lastActiveTime":-1}

限于 100 个文档。

loc - 包含键 (lat,lon,venueName) 的嵌入文档

isCreated - 布尔值

lastActiveTime - 日期

我遇到了异常:

org.springframework.data.mongodb.UncategorizedMongoDbException: sort() 没有索引的数据太多。添加索引或指定更小的限制;

我尝试了各种索引变体,复合和非复合,但我仍然遇到上述异常,尝试...

{'loc':'2d', 'lastActiveTime':-1}

还有:

{'lastActiveTime':-1}

我需要在文档中创建哪些索引才能使查询成功?

MongoDB 版本是 2.0.6

这是示例文档(带有相关键):

{
  "_id" : "5d5085601208aa918bea3c1ede31374d",
  "gender" : "female",
  "isCreated" : true,
  "lastActiveTime" : ISODate("2013-04-08T11:30:56.615Z"),
  "loc" : {
    "lat" : 32.082230499955806,
    "lon" : 34.813542940344945,
    "locTime" : NumberLong(0)
  }
}

【问题讨论】:

  • 你试过了吗,{loc: '2d', isCreated: 1, loc.venueName: 1, lastActiveTime: -1}
  • 您可以在您的问题中添加示例文档吗?只是为了确保查询适合开始。
  • 添加了示例文档..在该文档中 loc.venueName 为空/不存在

标签: mongodb exception indexing


【解决方案1】:

在我看来,索引尚未创建。如果您在lastActiveTime 上进行排序,那么这就是要索引的那个。

尝试通过在 mongo shell 中键入以下内容来确保您已正确设置索引:

use yourdbname
db.yourcollectionname.getIndexes()

【讨论】:

  • 你的意思是除了 loc 属性上的 2d 索引之外的索引,对吗?不复合..
  • 是的,lastActiveTime 需要它自己的索引,而不是复合索引。
  • 它被创建了....{ "v" : 1 , "key" : { "lastActiveTime" : -1} , "ns" : "hazeDB.profile" , "name" : " lastActiveTime" , "dropDups" : false , "sparse" : false} 有什么想法吗?
  • MongoDB 目前还不能使用索引交集,因此将 lastActiveTime 单独放置将没有用,并且会使索引不被使用。
  • 那你有什么建议?嗬,现在我...实际上我想我试过了,让我再检查一次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多