index.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. let mongoose = require('mongoose');
  2. let Schema = mongoose.Schema;
  3. const userModel = require('./model/user');
  4. const iconModel = require('./model/icon');
  5. const iconDraftModel = require('./model/iconDraft');
  6. const iconLibModel = require('./model/iconRepo');
  7. const counterModel = require('./model/counter');
  8. const iconBelongToRepoModel = require('./model/iconBelongToRepo');
  9. const repoRecommendModel = require('./model/repoRecommend');
  10. class MongoDB {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {String} name 集合名称
  15. * @param {Object} model 集合model模型
  16. * @return {Object} 集合对象
  17. */
  18. constructor (name, model) {
  19. if (!name || !model) {
  20. return;
  21. }
  22. this.model = this.schema(name, model);
  23. }
  24. /**
  25. * 单例模式,获取某一个collection对象
  26. * @param {String} name 集合名称
  27. * @param {String} model 数据模型
  28. * @return {Object} 集合对象
  29. */
  30. static getModel (name, model) {
  31. if (!!name && !!model) {
  32. return new this(name, model);
  33. }
  34. }
  35. /**
  36. * 添加记录,返回添加成功对象
  37. *
  38. * @param {Object} data 数据对象
  39. * @return {Object} 集合对象
  40. */
  41. async add (data) {
  42. return await this.model.create(data);
  43. }
  44. /**
  45. * 删除记录,返回添加成功对象
  46. *
  47. * @param {Object} data 数据对象
  48. */
  49. async delete (data) {
  50. return await this.model.remove(data);
  51. }
  52. /**
  53. * 更新记录,返回添加更新对象
  54. *
  55. * @param {Object} condition 查询条件
  56. * @param {Object} data 数据对象
  57. * @param {Object} options 更新配置
  58. * @return {Object} 集合对象
  59. */
  60. async update (condition, data, options = {}) {
  61. return await this.model.update(condition, data, options)
  62. }
  63. /**
  64. * 查找,返回对象数组
  65. *
  66. * @param {Object} data 查询条件
  67. * @param {String} fields 需要返回的字段, 多个字段空格分开,默认全部
  68. * @param {Object} options 选择配置{lean: true}
  69. * @return {Object} 集合对象
  70. */
  71. async find (data, fields = '', options = {}) {
  72. options = Object.assign({lean: true}, options);
  73. return await this.model.find(data, fields, options);
  74. }
  75. /**
  76. * 查找,返回第一个数据对象
  77. *
  78. * @param {Object} data 查询条件
  79. * @param {String} fields 需要返回的字段, 多个字段空格分开,默认全部
  80. * @param {Object} options 选择配置{lean: true}
  81. * @return {Object} 集合对象
  82. */
  83. async findOne (data, fields = '', options = {lean: true}) {
  84. let result = await this.model.find(data, fields, options);
  85. return (result[0] || null)
  86. }
  87. /**
  88. * 查找并更新,返回第一个数据对象
  89. *
  90. * @param {Object} data 查询条件
  91. * @param {Object} update 更新的字段
  92. * @param {Object} options 选择配置{lean: true}
  93. * @return {Object} 集合对象
  94. */
  95. async findOneAndUpdate (data, update, options = {lean: true}) {
  96. let result = await this.model.findOneAndUpdate(data, update, options);
  97. return (result || null)
  98. }
  99. /**
  100. * 查找该条件下的所有条目,返回数量
  101. *
  102. * @param {Object} data 查询条件
  103. * @param {String} fields 需要返回的字段, 多个字段空格分开,默认全部
  104. * @param {Object} options 选择配置{lean: true}
  105. * @return {Object} 集合对象
  106. */
  107. async count (data) {
  108. return await this.model.count(data);
  109. }
  110. /**
  111. * 生成mongoose collection实例
  112. *
  113. * @param {String} name 集合名称
  114. * @param {Object} model 集合model模型
  115. * @return {Object} 集合对象
  116. */
  117. schema (name, model) {
  118. let schema = new Schema(model);
  119. // 保证嵌套数组中 unique起作用
  120. return mongoose.model(name, schema);
  121. }
  122. }
  123. module.exports = {
  124. user: MongoDB.getModel('user', userModel),
  125. icon: MongoDB.getModel('icon', iconModel),
  126. iconRepo: MongoDB.getModel('iconRepo', iconLibModel),
  127. counter: MongoDB.getModel('counter', counterModel),
  128. iconDraft: MongoDB.getModel('iconDraft', iconDraftModel),
  129. iconBelongToRepo: MongoDB.getModel('iconBelongToRepo', iconBelongToRepoModel),
  130. repoRecommend: MongoDB.getModel('repoRecommend', repoRecommendModel)
  131. };