如何在mongoose中使变量成为唯一键?

时间:2014-03-24 06:39:24

标签: mongodb mongoose

例如,如果我有这个架构

var userSchema = mongoose.Schema({
    username: String,
    email: String,
    password: String,
    _todo: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Todo'}]
});

我希望用户名是唯一的密钥,其他用户无法复制。我怎么能这样做?

2 个答案:

答案 0 :(得分:8)

您可以使用unique属性添加约束。这也将为您的集合添加字段的“唯一”索引:

var userSchema = mongoose.Schema({
    username: { type: String, unique: true },
    email: String,
    password: String,
    _todo: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Todo'}]
});

答案 1 :(得分:0)

我遇到了同样的问题。但是无法通过公认的答案来解决。

因为我的示例非常简单,只需将name设为唯一。

var FoolSchema = Schema({
    name: {
      type: String,
      unique: true,
      index: true,
      required: true
    }
})

我每次都可以保存重复的名称。

然后我找到此链接: https://mongoosejs.com/docs/faq.html#unique-doesnt-work

解决方案是createIndex的{​​{1}},而不是猫鼬。

  1. 启动mongo shell mongoDBmongo
  2. 运行use yourdbName(您看不到db.foos.getIndexes()
  3. "unique" : true,
  4. 尝试步骤2。结果应包含db.foos.createIndex( { "name": 1 }, { unique: true } )

希望它可以帮助某人。