我可以动态地将索引添加到Mongoose中的模式吗?

时间:2016-11-23 12:09:14

标签: node.js mongodb mongoose mongodb-query

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

{
    "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"});

你认为这是可能的吗?

非常感谢。

1 个答案:

答案 0 :(得分:5)

答案是肯定的,你可以动态建立索引。

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

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

但我警告你,操纵指数是一项重大举措,根据你的收藏规模,这会对表演产生重大影响。

默认情况下,mongoDB使用前台方法创建索引,看看mongoDB对它的描述:

  

默认情况下,创建索引会阻止a上的所有其他操作   数据库。在集合上构建索引时,数据库就是这样   保持集合不可用于读取或写入操作,直到   索引构建完成

因此,如果你想真正动态创建索引,也许你应该考虑让mongoDB在后台创建索引:

  

对于可能长时间运行的索引构建操作,请考虑   后台操作使MongoDB数据库仍然可用   在指数建设运作期间。

Here is full mongoDB documentation about Indexes

ensureIndex(...) documentation

dropIndexes(...) documentation

getIndexes(...) documentation

How to call directly mongoDB methods from mongoose