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怎么可能做到这一点?