0

这是我使用的索引的名称

经度Latitude_indexContents_1_prominent_-1

那个 -1 的东西是有问题的并且是自动生成的。我想将其更改为 LongitudeLatitude_indexContents_1_prominent_min1

或者其他的东西

索引需要一段时间。所以我宁愿只是更改索引的名称。

例如,

如果我做

db.tablebusiness.find({ "LongitudeLatitude" : { "$nearSphere" : [106.772835, -6.186753], "$maxDistance" : 0.044983732050783008 }, "Prominent" : { "$gte" : 15 }, "indexContents" : { "$all" : [/^warung/] } }).hint("LongitudeLatitude_indexContents_1_Prominent_-1").limit(50).explain();

我懂了

> ).hint("LongitudeLatitude_indexContents_1_Prominent_-1").limit(50).explain();
Thu Sep 06 11:01:51 uncaught exception: error: { "$err" : "bad hint", "code" : 1
0113 }
4

2 回答 2

2

你为什么用hint()?那一定是我见过的最不未来的证明代码。如果您的查询没有有效地使用索引,那么您应该真正更改查询或添加另一个索引以使查询在索引上运行。强制 MongoDB 使用它自己找不到的索引实际上可能会进一步减慢查询速度,因为它会尝试使用不提供快捷方式的 b-tree。

事实上你的查询:

db.tablebusiness.find({ "LongitudeLatitude" : { "$nearSphere" : [106.772835, -6.186753], "$maxDistance" : 0.044983732050783008 }, "Prominent" : { "$gte" : 15 }, "indexContents" : { "$all" : [/^warung/] } })

将使用您创建的索引而不使用hint(). 如果有一天你为这个查询创建了一个更好的索引,那么hint()由于这个新索引,使用将阻止这个查询变得更快。不仅如此,您还必须更改所有代码中的索引名称。

至于更改索引的名称:我认为您必须先删除它,然后重新索引创建一个您自己的名称的新索引(尽管正如@Thilo 提到的,自命名索引将被删除)。

于 2012-09-06T07:24:58.083 回答
1

.hint("LongitudeLatitude_indexContents_1_Prominent_-1")

应该

.hint({ LongitudeLatitude_indexContents: 1, Prominent: -1 })

于 2012-09-06T04:06:44.890 回答