在参考 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 值。除非“用户名”实际上是唯一的。派生案例,但您应该明白这一点。 withusername
unique 我有同样的问题
unique
的验证方式与其他验证不同,而是执行您遇到的操作并从 mongo 返回 E11000 重复错误。如果您想在保存之前验证唯一性,则需要在 pre
过滤器中查找重复文档。 This question 演示了如何,或者有一个 plugin 封装了该模式。
【参考方案1】:
对于这个休眠线程的新观众:
mySchema.index(field1: 1, field2: 1, unique: true);
看到这个帖子:
Creating Multifield Indexes in Mongoose / MongoDB
【讨论】:
以上是关于在参考 Mongoose 中创建唯一索引的主要内容,如果未能解决你的问题,请参考以下文章