我可以在Mongoose中dynamic添加索引到我的模式吗?

例如我有以下结构的文件:

{ "subject":"Joe owns a dog", "content":"Dogs are man's best friend", "likes": 60, "year":2015, "language":"english" } 

架构将是:

 var schema = new Schema({ subject: {type: String}, content: {type: String}, likes: {type: int}, year: {type: int}, language: {type: String} } schema.createIndex({"subject": "text"}); 

我可以dynamic删除索引,并创build更多字段的另一个?

因此,如果现在在主题字段中search关键字,我想dynamic地改变它并在“主题”和“内容”中进行search。 改为:

 schema.createIndex({"subject": "text", "content": "text"}); 

你认为这是可能的吗?

非常感谢。

答案是肯定的,你可以dynamic构build索引。

使用ensureIndex(...); mongoDB函数。

要删除索引,请使用dropIndexes(...); mongoDB函数。


但是我警告你,操纵索引是一个重大的行动,这将取决于你的collections大小对表演有重大影响。

默认情况下,mongoDB使用前台方法创build索引,看一下mongoDB对它的说法:

默认情况下,创build索引会阻止数据库上的所有其他操作。 在集合上构build索引时,包含集合的数据库在读取或写入操作之前不可用,直到索引构build完成

所以,如果你真的想dynamic创build索引,也许你应该考虑让mongoDB在后台创build索引:

对于可能长时间运行的索引构build操作,请考虑后台操作,以便在索引构build操作期间MongoDB数据库保持可用状态。

这里是关于索引的完整的mongoDB文档


ensureIndex(…)文档

dropIndexes(…)文档

getIndexes(…)文档

如何从mongoose直接调用mongoDB方法