Mongodb 猫鼬模式:';独特的';不受尊重

Mongodb 猫鼬模式:';独特的';不受尊重,mongodb,mongoose,Mongodb,Mongoose,我正在尝试将Mongoose用于此模式 var RestoSchema = new Schema({ "qname" : {type: String, required: true, unique: true}, ... }); 问题是,这仍然允许使用现有的qname创建数据库的新条目。从下面我可以看到,索引已经创建,但在使用.save方法时没有任何明显的影响。我误解了什么 > db.restos.getIndexes() [ {

我正在尝试将Mongoose用于此模式

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
,有关调试该属性的一些提示,请参阅。