Validation 插入新文档,填充并验证它

Validation 插入新文档,填充并验证它,validation,mongoose,Validation,Mongoose,我已经设法让它工作了,但似乎效率很低: //card schema new Schema({ name: String, type: String, setname: String, text: String, image: String, faction: String, color: String, rarity: String, limit: Number, number: Number, endura

我已经设法让它工作了,但似乎效率很低:

//card schema
new Schema({
    name: String,
    type: String,
    setname: String,
    text: String,
    image: String,
    faction: String,
    color: String,
    rarity: String,
    limit: Number,
    number: Number,
    endurance: Number,
    level: Number,
    pur: Number,
    stages: Array
});

//deck schema
new Schema({
    personality: [{type: Schema.Types.ObjectId, ref: 'Card'}],
    mastery: [{type: Schema.Types.ObjectId, ref: 'Card'}],
    main: [{type: Schema.Types.ObjectId, ref: 'Card'}],
    owner: String
});

//example deck model validator
Model.schema.path('mastery').validate(function(value) {
    if (!value || (typeof value == 'Array' && !value.length)) {return false;}
    return value[0].type == 'Mastery';
}, 'Mastery card is not of type mastery');

server.prototype.addDeck = function(client, ids) {
Deck.collection.insert({
    owner: client.conn.uid,
    main: ids.main,
    personality: ids.personality,
    mastery: ids.mastery
}, function(err, res1) {
    Deck.findById(res1[0]._id).populate('main personality mastery').exec(function(err, res2) {
        res2.save(function(err, res3) {
            if (err) {
                //fail
            } else {
                //success
            }
        });
    });
});
}

首先,我创建一个新的文档,绕过验证,这样我就可以填充它并尝试保存它,这样它就可以被验证。一些验证方法会检查卡片上的值,例如它的颜色,这就是为什么需要填充卡片的原因。有4个单独的查询只是为了创建它,如果验证失败,可能有5个查询。有什么方法可以提高效率吗?

为什么不在查询数据库之前先使用验证逻辑?Mongoose怎么可能做到这一点?