如何在配置多个唯一键时判断哪个键是重复的

时间:2015-11-20 13:37:24

标签: node.js mongodb mongoose

我的架构定义如下:

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,用户名和电子邮件地址设置为唯一密钥来使其唯一,现在当我收到重复的密钥错误时,我无法确定哪个密钥是重复的。

0 个答案:

没有答案