Mongodb 猫鼬模式:';独特的';不受尊重
我正在尝试将Mongoose用于此模式Mongodb 猫鼬模式:';独特的';不受尊重,mongodb,mongoose,Mongodb,Mongoose,我正在尝试将Mongoose用于此模式 var RestoSchema = new Schema({ "qname" : {type: String, required: true, unique: true}, ... }); 问题是,这仍然允许使用现有的qname创建数据库的新条目。从下面我可以看到,索引已经创建,但在使用.save方法时没有任何明显的影响。我误解了什么 > db.restos.getIndexes() [ {
var RestoSchema = new Schema({
"qname" : {type: String, required: true, unique: true},
...
});
问题是,这仍然允许使用现有的qname
创建数据库的新条目。从下面我可以看到,索引已经创建,但在使用.save
方法时没有任何明显的影响。我误解了什么
> db.restos.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "af.restos",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"qname" : 1
},
"ns" : "af.restos",
"name" : "qname_1",
"background" : true,
"safe" : null
}
]
getIndexes
输出显示qname
上的索引不是作为唯一索引创建的。Mongoose不会更改现有索引,因此您必须手动删除索引,然后重新启动应用程序,以便Mongoose可以将其重新创建为唯一索引
在外壳中:
db.restos.dropIndex('qname_1')
拜伦的回答似乎为我解决了这个问题。我甚至尝试过删除集合并重新创建,但直到我使用了名为“mongoose unique validator”的node.js NPM插件(您可以了解更多信息)后,它才起作用
这就是说,奇怪的是,我的唯一索引一直在运行,直到一个模式更改实现了“”插件,我现在使用它来设置_id值。可能发生了其他事情,但它现在对我有效,所以我继续前进。谢谢,但现在当我重新启动应用程序时,它不会创建新索引。甚至在
qname
的属性列表中添加了index:true
,有关调试该属性的一些提示,请参阅。