【问题标题】:Create Unique Index in ref Mongoose在参考 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 封装了该模式。

标签: node.js mongodb mongoose


【解决方案1】:

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

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

看到这个帖子:

Creating Multifield Indexes in Mongoose / MongoDB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多