db.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. 'use strict'
  2. const mongoose = require('mongoose')
  3. const DataModel = mongoose.model('Data', mongoose.Schema({
  4. date: {
  5. type: Date,
  6. default: () => new Date()
  7. },
  8. data: Object
  9. }))
  10. module.exports = {
  11. /**
  12. * Connect to MongoDB
  13. * @param {String} mongoConnectionString MongoDB connection string
  14. * @returns {Object} Connecion object
  15. */
  16. async connect(mongoConnectionString) {
  17. const connection = await mongoose.connect(mongoConnectionString, { useNewUrlParser: true, useFindAndModify: false })
  18. mongoose.connection.on('error', err => console.log(err))
  19. console.log('The database connection was established.')
  20. return connection
  21. },
  22. /**
  23. * Disconnect from MongoDB
  24. * @param {Object} connectionObj Connecion object
  25. * @returns {Promise<void>} The connection was destroyed
  26. */
  27. async disconnect(connectionObj) {
  28. await connectionObj.disconnect()
  29. console.log('The database connection was destroyed.')
  30. },
  31. Model: DataModel,
  32. /**
  33. * Add a document
  34. * @param {Object} dataObj The new data document (only the data property!)
  35. * @returns {Promise<Object>} The newly inserted document
  36. */
  37. async add(dataObj) {
  38. const doc = await DataModel.create({ data: dataObj })
  39. console.log(`New document was added. id=${doc.id}`)
  40. return doc
  41. },
  42. /**
  43. * Delete a document
  44. * @param {String} dataId The _id of the document to delete
  45. * @returns {Promise<void>} The document was deleted
  46. */
  47. async del(dataId) {
  48. const doc = await DataModel.findByIdAndDelete(dataId)
  49. console.log(`A document was deleted. id=${doc.id}`)
  50. },
  51. /**
  52. * Update a document
  53. * @param {String} dataId The _id of the document to update
  54. * @param {Object} newDataObj The new data content of the document (only the data property!)
  55. * @returns {Promise<Object>} The newly updated document
  56. */
  57. async update(dataId, newDataObj) {
  58. const doc = await DataModel.findByIdAndUpdate(dataId, { $set: { data: newDataObj } }, { new: true })
  59. console.log(`A document was updated. id=${doc.id}`)
  60. return doc
  61. },
  62. /**
  63. * Find a document
  64. * @param {String} dataId The _id of the document to find
  65. * @returns {Promise<Object>} The found document
  66. */
  67. findId(dataId) {
  68. return DataModel.findById(dataId)
  69. },
  70. find: DataModel.find,
  71. /**
  72. * Find data by any application parameter
  73. * @param {Object} obj Application properties
  74. * @param {String} [obj.msgId] Message ID (type of message)
  75. * @param {String} [obj.uuid] Unique uuid
  76. * @param {String} [obj.experimentName] Experiment name
  77. * @param {String} [obj.sceneName] Scene name
  78. * @param {String} [obj.userId] User ID
  79. * @param {String} [obj.experimentId] Experiment ID
  80. * @returns {Promise<Object[]>} Database query result
  81. */
  82. findCustom({ msgId, uuid, experimentName, sceneName, userId, experimentId }) {
  83. let search = {}
  84. if (msgId) search['data.msgId'] = msgId
  85. if (uuid) search['data.uuid'] = uuid
  86. if (experimentName) search['data.msg.experimentName'] = experimentName
  87. if (sceneName) search['data.msg.sceneName'] = sceneName
  88. if (userId) search['data.userId'] = userId
  89. if (experimentId) search['data.experimentId'] = experimentId
  90. return DataModel.find(search)
  91. }
  92. }