Mongoose架构:“独特”不被尊重

时间:2015-06-21 15:24:24

标签: mongodb mongoose

我正在尝试将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
    }
]

2 个答案:

答案 0 :(得分:1)

getIndexes输出显示qname上的索引未创建为唯一索引。 Mongoose不会改变现有索引,因此您必须手动删除索引,然后重新启动应用程序,以便Mongoose可以将其重新创建为唯一索引。

在shell中:

db.restos.dropIndex('qname_1')

答案 1 :(得分:0)

ByronC的回应here似乎已经为我解决了。我甚至尝试删除集合并重新创建,直到我使用名为“mongoose-unique-validator”的node.js NPM插件时,它仍然无效,您可以了解有关here的更多信息。

那就是说,奇怪的是我的唯一索引一直在运行,直到一个模式更改实现了我现在用来设置_id值的“uuid”插件。可能还有其他事情正在发生,但它现在对我有用,所以我继续前进。