/** * mongodb Helper * * @author caiaolin * @date 2017/5/22. */ class MongooseHelper { /** * mongoose数据模型 * * @var {object} */ model = null; /** * 查找单一数据 * * @param {object} conditions * @param {object} fields * @return {Promise} */ findOne(conditions, fields = null) { let self = this; return new Promise(function (resolve, reject) { self.model.findOne(conditions, fields, function (error, data) { if (error) { reject(null); } else { resolve(data); } }); }); } /** * 查找数据 * * @param {object} conditions * @param {object} fields * @return {Promise} */ find(conditions, fields = null) { let self = this; return new Promise(function (resolve, reject) { self.model.find(conditions, fields, function (error, data) { if (error) { reject(error); } else { resolve(data); } }); }); } /** * 查找且更新(原子操作) * * @param {object} update * @param {object} condition * @param {object} options * @return {Promise} */ findAndModify(condition, update, options) { let self = this; return new Promise(function (resolve, reject) { self.model.findOneAndUpdate(condition, update, options, function(error, data) { if (error) { reject(null); } else { resolve(data); } }); }); } /** * 新增操作 * * @param {object} data * @return {Promise} */ create(data) { let self = this; return new Promise(function (resolve, reject) { self.model.create(data, function(error, data) { if (error) { reject(error); } else { resolve(data); } }); }); } /** * 更新操作 * * @param {object} condition * @param {object} updateData * @return {Promise} */ update(condition, updateData) { let self = this; return new Promise(function (resolve, reject) { let validate = new self.model(updateData); let validateError = validate.validateSync(); if (validateError) { reject(validateError); } self.model.update(condition, {$set: updateData}, function(error, result) { if (error) { reject(error); } else { resolve(result); } }); }); } } module.exports = MongooseHelper;