我可以在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方法