我的架构定义如下:
var UserSchema = [{
id: { // unique id for users, store as int
type: Number, index: true, unique: true },
login: { // login name
type: String, index: true, unique: true },
mail: { // mail address
type: String, index: true, unique: true }
}, {
id: false // disable mongoose's automatic id mapping
}];
以及创建这些新文档的方法
/**
* Generate user Id, range 1-16777215 (1-FFFFFF, in Hex)
* @private
* @return {number} - random generated user id
*/
UserManager.prototype._generateUserId = function () {
return Math.floor(Math.random() * 16777215) + 1;
};
/**
* Create a user with desired "login" and "mail"
* @access public
* @param {string} login - user login name
* @param {string} mail - user mail address
*/
UserManager.prototype.createUser = function (login, mail) {
var d = Q.defer();
var rec = new this.umodel({ login: login, mail: mail });
var try_create = (function () {
rec.id = this._generateUserId();
rec.save((function (error) {
if (error)
if (error.code == 11000) {
// E11000: duplicate key error
// genre
try_create();
} else
d.reject();
d.resolve(rec.id);
}).bind(this));
}).bind(this);
try_create();
};
我设法通过将用户的id,用户名和电子邮件地址设置为唯一密钥来使其唯一,现在当我收到重复的密钥错误时,我无法确定哪个密钥是重复的。