我无法为profile
创建索引:
var user = new Schema({
profile : "String",
fullname:"String"
})
user.statics.createIndexOfProfile = function(callback){
this.ensureIndex("profile",function(err,doc){
if(err) {
console.log(err+'sna');
callback(err);
}
else {
console.log(doc+'santhosh');
callback(null,doc);
}
});
我收到的错误如this.ensureIndex is not a function
答案 0 :(得分:6)
正确的API为ensureIndexes
,可为模式中的每个ensureIndex
声明发送index
个mongo命令。
这是一个样本
var UserSchema = new Schema({
profile : {type: String, index: true},
fullname: String
});
var User = mongoose.model('User', UserSchema);
User.ensureIndexes(function(err) {
if (err)
console.log(err);
else
console.log('create profile index successfully');
});
或通过index
var UserSchema = new Schema({
profile : {type: String, index: true},
fullname: String
});
UserSchema.index({ profile: 1 });
var User = mongoose.model('User', UserSchema);
运行上述代码后,检查MongoDB中的索引。
> db.users.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.users"
},
{
"v" : 1,
"key" : {
"profile" : 1
},
"name" : "profile_1",
"ns" : "test.users",
"background" : true
}
]
答案 1 :(得分:1)
如果要为某些字段添加索引,只需将index: true
添加到其定义中。
所以你可以做到以下几点:
var user = new Schema({
profile : { type: String, index: true }, // field level
// ...
});
或
user.index({ profile: 1 }); // schema level
来自mongoose
docs:
当您的应用程序启动时,Mongoose会自动调用 ensureIndex用于架构中的每个已定义索引。猫鼬会打电话 依次为每个索引确保索引,并发出一个'索引'活动 所有ensureIndex调用成功或存在时的模型 错误。