| const mongoose = require('mongoose') | |
| const { Schema } = mongoose | |
| module.exports = class mongoDB { | |
| constructor(url, options = { useNewUrlParser: true, useUnifiedTopology: true }) { | |
| this.url = url | |
| this.data = this._data = this._schema = this._model = {} | |
| this.db | |
| this.options = options | |
| } | |
| async read() { | |
| this.db = await mongoose.connect(this.url, { ...this.options }) | |
| this.connection = mongoose.connection | |
| let schema = this._schema = new Schema({ | |
| data: { | |
| type: Object, | |
| required: true, //depends on whether the field is mandatory or not | |
| default: {} | |
| } | |
| }) | |
| // this._model = mongoose.model('data', schema) | |
| try { this._model = mongoose.model('data', schema) } catch { this._model = mongoose.model('data') } | |
| this._data = await this._model.findOne({}) | |
| if (!this._data) { | |
| this.data = {} | |
| await this.write(this.data) | |
| this._data = await this._model.findOne({}) | |
| } else this.data = this._data.data | |
| return this.data | |
| } | |
| async write(data) { | |
| if (!data) return data | |
| if (!this._data) return (new this._model({ data })).save() | |
| this._model.findById(this._data._id, (err, docs) => { | |
| if (!err) { | |
| if (!docs.data) docs.data = {} | |
| docs.data = data | |
| return docs.save() | |
| } | |
| }) | |
| } | |
| } |