输入相同的UserName时,Node.js Mongoose重复键

时间:2015-12-12 18:59:58

标签: javascript node.js mongodb mongodb-query

在我的MongoDb数据库中,用户配置文件集合遵循以下架构:

{
"_id": {
    "$oid": "566c69ab266ee48f24105a31"
},
"userid": "8d67e890-a0ff-11e5-9203-93a5a9af8b67",
"telnumber": {
    "value": "0600000000",
    "share": true
},
"fullname": {
    "value": "Oscar Götting",
    "share": true
},
"emailaddr": {
    "value": "x@y.fr",
    "share": true
},
"__v": 0

}

为了在node.js中重现这个Schema,我正在执行以下代码:

 // Profile fields schema
var yokiProfileDataField = new mongoose.Schema({
  value: String,
  share: Boolean
},{ _id : false });

// Profile data schema
var yokiProfileDataSchema = new mongoose.Schema({
  userid: { type: String, required: true, unique: true }, // User unique user-id
  emailaddr: { type: yokiProfileDataField },
  fullname: { type: yokiProfileDataField },
  telnumber: { type: yokiProfileDataField }
});

如果我尝试使用其他人已输入的名称进行注册,则会出现重复的密钥错误:

MongoError: E11000 duplicate key error index: yoki_users.profiles.$fullname_1 dup key: { : { value: "Oscar Götting", share: true } }
    at Function.MongoError.create (/Users/Rakso/Projets/Yoki/YokiWeb/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11)
    at toError (/Users/Rakso/Projets/Yoki/YokiWeb/node_modules/mongoose/node_modules/mongodb/lib/utils.js:114:22)
    at /Users/Rakso/Projets/Yoki/YokiWeb/node_modules/mongoose/node_modules/mongodb/lib/collection.js:597:23
    at /Users/Rakso/Projets/Yoki/YokiWeb/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:469:9
    at resultHandler (/Users/Rakso/Projets/Yoki/YokiWeb/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:416:5)
...

这怎么可能,我该如何解决这个问题? 同样在MongoLab中,所有索引的唯一属性都设置为unique: true,但在我的代码中设置为unique: false的属性除外,这是正常的吗?这可能是问题吗?

1 个答案:

答案 0 :(得分:0)

我刷新了所有索引并开始使用新索引。它解决了我的问题。