db.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. return connection
  20. },
  21. /**
  22. * Disconnect from MongoDB
  23. * @param {Object} connectionObj Connecion object
  24. * @returns {Promise<void>} The connection was destroyed
  25. */
  26. disconnect(connectionObj) {
  27. return connectionObj.disconnect()
  28. },
  29. Model: DataModel,
  30. /**
  31. * Add a document
  32. * @param {Object} dataObj The new data document (only the data property!)
  33. * @returns {Promise<Object>} The newly inserted document
  34. */
  35. async add(dataObj) {
  36. const doc = await DataModel.create({ data: dataObj })
  37. // console.log(`New document was added. id=${doc.id}`)
  38. return doc
  39. },
  40. /**
  41. * Delete a document
  42. * @param {String} dataId The _id of the document to delete
  43. * @returns {Promise<void>} The document was deleted
  44. */
  45. async del(dataId) {
  46. const doc = await DataModel.findByIdAndDelete(dataId)
  47. // console.log(`A document was deleted. id=${doc.id}`)
  48. },
  49. /**
  50. * Update a document
  51. * @param {String} dataId The _id of the document to update
  52. * @param {Object} newDataObj The new data content of the document (only the data property!)
  53. * @returns {Promise<Object>} The newly updated document
  54. */
  55. async update(dataId, newDataObj) {
  56. const doc = await DataModel.findByIdAndUpdate(dataId, { $set: { data: newDataObj } }, { new: true })
  57. // console.log(`A document was updated. id=${doc.id}`)
  58. return doc
  59. },
  60. /**
  61. * Find a document
  62. * @param {String} dataId The _id of the document to find
  63. * @returns {Promise<Object>} The found document
  64. */
  65. findId(dataId) {
  66. return DataModel.findById(dataId)
  67. },
  68. find: DataModel.find,
  69. /**
  70. * Find data by any application parameter
  71. * @param {Object} obj Application properties
  72. * @param {String} [obj.msgId] Message ID (type of message)
  73. * @param {String} [obj.uuid] Unique uuid
  74. * @param {String} [obj.experimentName] Experiment name
  75. * @param {String} [obj.sceneName] Scene name
  76. * @param {String} [obj.userId] User ID
  77. * @param {String} [obj.experimentId] Experiment ID
  78. * @returns {Promise<Object[]>} Database query result
  79. */
  80. findCustom({ msgId, uuid, experimentName, sceneName, userId, experimentId }) {
  81. let search = {}
  82. if (msgId) search['data.msgId'] = msgId
  83. if (uuid) search['data.uuid'] = uuid
  84. if (experimentName) search['data.msg.experimentName'] = experimentName
  85. if (sceneName) search['data.msg.sceneName'] = sceneName
  86. if (userId) search['data.userId'] = userId
  87. if (experimentId) search['data.experimentId'] = experimentId
  88. return DataModel.find(search)
  89. }
  90. }