2013-04-08 77 views
0

我有以下查询:无法排序没有索引蒙戈查询

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

排序方式:

{"lastActiveTime":-1} 

限量100个文档。

- 包含密钥(纬度,经度,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) 
    } 
} 
+0

您是否尝试过,'{LOC: '2D',isCreated:1,loc.venueName:1,lastActiveTime :-1}'? – Sammaye 2013-04-08 10:33:57

+0

你可以向你的问题添加一个示例文档吗?只是为了确保查询适合于开始。 – 2013-04-08 11:32:41

+0

添加示例文件..in文件loc.venueName为空/不存在 – 2013-04-08 11:44:53

回答

0

像指数尚未创建的声音给我。如果你正在排序lastActiveTime那么这是一个索引。

尝试veryfing,你必须通过在蒙戈shell中键入该设置不当指标:

use yourdbname 
db.yourcollectionname.getIndexes() 
+0

根据mongoVUE客户端创建我也可以看到它具有值... – 2013-04-08 10:29:55

+0

您的意思是指除了2d索引之外的索引在loc属性上,对吗?不是化合物。 – 2013-04-08 10:32:02

+0

是的,lastActiveTime需要它自己的索引,而不是复合索引。 – UpTheCreek 2013-04-08 10:32:36