我想在ensureIndex
上调用authorName
,命令是什么以及我应该在这个代码中放哪个位置?
var mongoose = require('mongoose');
// defines the database schema for this object
var schema = mongoose.Schema({
projectName : String,
authorName : String,
comment : [{
id : String,
authorName : String,
authorEmailAddress : { type : String, index : true }
}]
});
// Sets the schema for model
var ProjectModel = mongoose.model('Project', schema);
// Create a project
exports.create = function (projectJSON) {
var project = new ProjectModel({
projectName : projectJSON.projectName,
authorName : projectJSON.authorName,
comment : [{
id : projectJSON.comments.id,
authorName : projectJSON.comments.authorName,
authorEmailAddress : projectJSON.authorEmailAddress
});
project.save(function(err) {
if (err) {
console.log(err);
} else{
console.log("success");
}
});
});
}
答案 0 :(得分:25)
您不直接致电ensureIndex
,表示该字段应在您的架构中编入索引,如下所示:
var schema = mongoose.Schema({
projectName : String,
authorName : { type: String, index: true }
});
根据该定义,当您通过ensureIndex
电话注册模型时,Mongoose会为您致电mongoose.model
。
要查看Mongoose正在进行的ensureIndex
调用,请通过在代码中添加以下内容来启用调试输出:
mongoose.set('debug', true);
答案 1 :(得分:12)
您可以使用以下声明:
mongoose.connection.collections['my_collection'].ensureIndex({ "key": 1 }, { "unique": true }, callback);
例如,您想要进行一些集成测试,因此您需要快速删除集合。
在这种情况下,即使选项autoIndex
设置为true
,mongoose也不会在运行时再次设置索引。
在这种情况下,这个答案可能很有用。
答案 2 :(得分:4)
您可以调用Schema #index方法来创建索引
let urlSchema = new Schema({
url: String,
status: Number
}
);
urlSchema.index({ url: 1 }, { unique: true, background: true, dropDups: true });
你可以听创建索引事件。
let UrlModel = mongoose.model('url', urlSchema);
UrlModel.on('index', function(error) {
if (error && error.message) {
console.log(`Url collection create index error:${error.message}`);
}
});
注意:创建索引的过程是异步的。因此,当您创建唯一索引时,无法插入重复数据。或创建索引将失败;
答案 3 :(得分:1)
首先在authorName字段上定义索引,如果由于某些要求而手动想要调用ensureIndex,则必须将 autoIndex设置为false 。这就是您的架构的样子:
var schema = mongoose.Schema({
projectName : String,
authorName : {type : String, index : true}
comment : [{
id : String,
authorName : String,
authorEmailAddress : { type : String, index : true }
}]
}, {
// Turn-off auto indexing, we manually need to trigger indexing
autoIndex : false
});
根据要求,您可以在使用此架构创建的模型上调用ensureIndexes方法,即 的 ProjectModel.ensureIndexes(); 强>