我朋友的应用程序旨在使用MongoDB索引。他在本地开发时一切都很好,但是一旦他将代码移到托管服务提供商那里,代码就失败了:
db.createIndex('collections', {title:"text", description:"text"}, function(err, indexName) {
console.log("8. index name: " + indexName);
});
错误消息是“索引创建失败”
提供商说这是因为他们没有将MongoDB升级到2.6,他们的版本是2.4,他们没有升级计划。我查看了MongoDB网站,但索引部分没有提到索引在2.6之前不可用。它只说2.6有一些额外的功能。那么这里发生了什么,这个代码出了什么问题,或者说MongoDB在2.6之前不支持索引,怎么可能,或者我们做错了什么,用MongoDB 2.4进行快速搜索的选项是什么?
答案 0 :(得分:1)
正如Lix所说,createIndex已被弃用。 您应该使用ensureIndex:
collection.ensureIndex({title:"text", description:"text"}, function(err, indexName) {
//handle error and check index name
})
请记住,这是复合索引,而不是一次创建两个单独的索引
此处有更多信息:link
有关nodejs中索引的信息(我假设您使用nodejs,因为您使用了回调:) link2
修改强>
文档中有信息表明“在MongoDB 2.4中,您需要手动启用文本搜索功能来创建文本索引并执行文本搜索。”
链接和来源:indexes
答案 1 :(得分:0)
这里有点混乱。 MongoDB 2.4。*确实有索引;索引不是2.6的特征 - 所以这不是问题。 我会尝试两件事:首先,尝试从mongo shell手动创建索引 - 也许错误消息更有意义。如果这没有帮助,请要求提供者查看mongod日志文件 - 它肯定会显示您的索引创建尝试操作,并且希望它显示失败的原因。 最后,它可能会失败,因为文本搜索可能尚未启用? MongoDB 2.4文档提到" textSearchEnabled"启动mongod进程时需要设置为true的命令行参数
希望这有帮助。