metusbase
Version:
This package is an NPM module that makes using JSON and Mongo fast, secure and easy. Developer: mete52
90 lines (89 loc) • 2.75 kB
JavaScript
import { Schema, model } from "mongoose";
const DataSchema = new Schema({
key: { type: String, required: true, unique: true },
value: { type: Schema.Types.Mixed, default: {} },
});
const DataModel = model("metusbase", DataSchema);
export class MongoDatabase {
async set(key, value) {
const existing = await DataModel.findOne({ key });
if (existing) {
existing.value = value;
await existing.save();
}
else {
await DataModel.create({ key, value });
}
}
async get(key) {
const data = await DataModel.findOne({ key });
return data ? data.value : null;
}
async getAll() {
const all = await DataModel.find();
const result = {};
all.forEach((doc) => {
result[doc.key] = doc.value;
});
return result;
}
async has(key) {
const exists = await DataModel.exists({ key });
return !!exists;
}
async delete(key) {
await DataModel.deleteOne({ key });
}
async deleteAll(message) {
if (!message) {
return "You must provide a confirmation message to delete all data.";
}
await DataModel.deleteMany({});
}
async push(key, value) {
const existing = await DataModel.findOne({ key });
if (!existing) {
await DataModel.create({ key, value: [value] });
return;
}
if (!Array.isArray(existing.value)) {
existing.value = [];
}
existing.value.push(value);
await existing.save();
}
async unpush(key, value) {
const existing = await DataModel.findOne({ key });
if (!existing || !Array.isArray(existing.value))
return;
if (value === undefined) {
existing.value = [];
}
else {
existing.value = existing.value.filter((item) => item !== value);
}
await existing.save();
}
async add(key, value) {
const existing = await DataModel.findOne({ key });
if (!existing) {
await DataModel.create({ key, value });
}
else {
const current = typeof existing.value === "number" ? existing.value : 0;
existing.value = current + value;
await existing.save();
}
}
async subtract(key, value) {
const existing = await DataModel.findOne({ key });
if (!existing) {
await DataModel.create({ key, value: -value });
}
else {
const current = typeof existing.value === "number" ? existing.value : 0;
existing.value = current - value;
await existing.save();
}
}
}