counter_model.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * ID计数器数据模型
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/6/23
  6. * @version
  7. */
  8. const BaseModel = require("../../common/base/base_model");
  9. const mongoose = require("mongoose");
  10. class CounterModel extends BaseModel {
  11. /**
  12. * 构造函数
  13. *
  14. * @return {void}
  15. */
  16. constructor() {
  17. let parent = super();
  18. parent.model = mongoose.model('counter');
  19. parent.init();
  20. }
  21. /**
  22. * 获取自增id
  23. *
  24. * @param {String} model
  25. * @return {Number}
  26. */
  27. async getId(model = '') {
  28. if (model === '') {
  29. return 0;
  30. }
  31. let update = {$inc: {sequence_value: 1}};
  32. let condition = {_id: model};
  33. let options = {new: true};
  34. // 先查找更新
  35. let idData = await this.db.findAndModify(condition, update, options);
  36. let idResult = idData === null || idData.sequence_value === undefined ? 0 : idData.sequence_value;
  37. // 如果没有对应记录则新增
  38. if (idResult === 0) {
  39. let insertResult = await this.db.create({_id: model, sequence_value: 1});
  40. idResult = Object.keys(insertResult).length > 0 ? 1 : 0;
  41. }
  42. return idResult;
  43. }
  44. }
  45. module.exports = CounterModel;