在参考 Mongoose 中创建唯一索引

Posted

技术标签:

【中文标题】在参考 Mongoose 中创建唯一索引【英文标题】:Create Unique Index in ref Mongoose 【发布时间】:2014-08-08 18:33:29 【问题描述】:

我有这些架构:

var userSchema = new mongoose.Schema(
    username: type: String,unique: true
);

mongoose.model( 'User', userSchema );


var fooSchema = new mongoose.Schema(
    title : type: String,trim: true,
    owner : type: mongoose.Schema.Types.ObjectId, ref: 'User'
);

fooSchema.index( title: 1, owner: 1 ,  unique: true ); //does not work
mongoose.model( 'Foo', fooSchema);

我想使用验证,那么每个 foo 可以有唯一的标题和唯一的用户

我试过了

fooSchema.index( title: 1, owner: 1 ,  unique: true );

但如果另一个用户创建具有相同标题的新 foo 也会出现错误

更新: 我将unique: true 添加到username,但我有同样的问题

【问题讨论】:

看来您真正想要的是“标题”和“用户名”的独特组合。由于您选择了参考设计而不是嵌入式,因此实际数据位于单独的集合中。除了将“用户名”指定为该模型的唯一性(您可能想要)之外,这使得该任务变得不可能。 @NeilLunn 为什么我必须添加唯一的用户名? userSchema 的 ObjectId 是唯一的 因为当您添加“Brad”,然后再次添加“Brad”作为用户名时,每次都会获得不同的 ObjectId 值。除非“用户名”实际上是唯一的。派生案例,但您应该明白这一点。 with username unique 我有同样的问题 unique 的验证方式与其他验证不同,而是执行您遇到的操作并从 mongo 返回 E11000 重复错误。如果您想在保存之前验证唯一性,则需要在 pre 过滤器中查找重复文档。 This question 演示了如何,或者有一个 plugin 封装了该模式。 【参考方案1】:

对于这个休眠线程的新观众:

mySchema.index(field1: 1, field2: 1, unique: true);

看到这个帖子:

Creating Multifield Indexes in Mongoose / MongoDB

【讨论】:

以上是关于在参考 Mongoose 中创建唯一索引的主要内容,如果未能解决你的问题,请参考以下文章

oracle 唯一约束 为啥 唯一索引

Oracle数据库主键约束与唯一索引有啥区别?

唯一索引不适用于 Mongoose / MongoDB

在 IBM netezza sql server 中创建唯一的主键?

mysql数据库索引

SQL Server 为一列创建多个非聚集索引与在一个索引中创建多个列