【问题标题】:Mongoose schema: 'unique' not being respected猫鼬模式:“独特”不被尊重
【发布时间】:2015-09-07 02:09:12
【问题描述】:

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

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

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

    在外壳中:

    db.restos.dropIndex('qname_1')
    

    【讨论】:

    • 谢谢,但现在我重新启动应用程序时它不会创建新索引。甚至将index:true 添加到qname 的属性列表中
    • 请参阅 stackoverflow.com/questions/12452865/… 了解有关调试的一些技巧。
    【解决方案2】:

    ByronC 的回复here 似乎为我解决了这个问题。我什至尝试删除集合并重新创建,但在我使用名为“mongoose-unique-validator”的 node.js NPM 插件之前它仍然无法正常工作,您可以了解更多关于 here 的信息。

    也就是说,奇怪的是我的唯一索引一直起作用,直到实现了“uuid”插件的架构更改,我现在使用它来设置_id值。可能还有其他事情发生,但它现在对我有用,所以我继续前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 2015-02-05
      • 2018-09-30
      • 2013-06-23
      • 2014-03-25
      • 1970-01-01
      • 2016-08-05
      相关资源
      最近更新 更多