例如,我有以下文件结构:
{
"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"});
我可以动态删除索引并创建另一个包含更多字段的索引吗?
因此,如果现在它在主题字段中搜索关键字,我想动态更改它并在" subject"中搜索和"内容"。改为:
schema.createIndex({"subject": "text", "content": "text"});
你认为这是可能的吗?
非常感谢。
答案 0 :(得分:5)
答案是肯定的,你可以动态建立索引。
使用ensureIndex(...);
mongoDB函数。
要删除索引,请使用dropIndexes(...);
mongoDB函数。
但我警告你,操纵指数是一项重大举措,根据你的收藏规模,这会对表演产生重大影响。
默认情况下,mongoDB使用前台方法创建索引,看看mongoDB对它的描述:
默认情况下,创建索引会阻止a上的所有其他操作 数据库。在集合上构建索引时,数据库就是这样 保持集合不可用于读取或写入操作,直到 索引构建完成
因此,如果你想真正动态创建索引,也许你应该考虑让mongoDB在后台创建索引:
对于可能长时间运行的索引构建操作,请考虑 后台操作使MongoDB数据库仍然可用 在指数建设运作期间。
Here is full mongoDB documentation about Indexes
ensureIndex(...) documentation