119 lines
2.9 KiB
JavaScript
119 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _utils = require("./utils/index.cjs");
|
|
var _mongodb = require("mongodb");
|
|
const DRIVER_NAME = "mongodb";
|
|
module.exports = (0, _utils.defineDriver)(opts => {
|
|
let collection;
|
|
const getMongoCollection = () => {
|
|
if (!collection) {
|
|
if (!opts.connectionString) {
|
|
throw (0, _utils.createRequiredError)(DRIVER_NAME, "connectionString");
|
|
}
|
|
const mongoClient = new _mongodb.MongoClient(opts.connectionString, opts.clientOptions);
|
|
const db = mongoClient.db(opts.databaseName || "unstorage");
|
|
collection = db.collection(opts.collectionName || "unstorage");
|
|
}
|
|
return collection;
|
|
};
|
|
return {
|
|
name: DRIVER_NAME,
|
|
options: opts,
|
|
getInstance: getMongoCollection,
|
|
async hasItem(key) {
|
|
const result = await getMongoCollection().findOne({
|
|
key
|
|
});
|
|
return !!result;
|
|
},
|
|
async getItem(key) {
|
|
const document = await getMongoCollection().findOne({
|
|
key
|
|
});
|
|
return document?.value ?? null;
|
|
},
|
|
async getItems(items) {
|
|
const keys = items.map(item => item.key);
|
|
const result = await getMongoCollection().find({
|
|
key: {
|
|
$in: keys
|
|
}
|
|
}).toArray();
|
|
const resultMap = new Map(result.map(doc => [doc.key, doc]));
|
|
return keys.map(key => {
|
|
return {
|
|
key,
|
|
value: resultMap.get(key)?.value ?? null
|
|
};
|
|
});
|
|
},
|
|
async setItem(key, value) {
|
|
const currentDateTime = /* @__PURE__ */new Date();
|
|
await getMongoCollection().updateOne({
|
|
key
|
|
}, {
|
|
$set: {
|
|
key,
|
|
value,
|
|
modifiedAt: currentDateTime
|
|
},
|
|
$setOnInsert: {
|
|
createdAt: currentDateTime
|
|
}
|
|
}, {
|
|
upsert: true
|
|
});
|
|
},
|
|
async setItems(items) {
|
|
const currentDateTime = /* @__PURE__ */new Date();
|
|
const operations = items.map(({
|
|
key,
|
|
value
|
|
}) => ({
|
|
updateOne: {
|
|
filter: {
|
|
key
|
|
},
|
|
update: {
|
|
$set: {
|
|
key,
|
|
value,
|
|
modifiedAt: currentDateTime
|
|
},
|
|
$setOnInsert: {
|
|
createdAt: currentDateTime
|
|
}
|
|
},
|
|
upsert: true
|
|
}
|
|
}));
|
|
await getMongoCollection().bulkWrite(operations);
|
|
},
|
|
async removeItem(key) {
|
|
await getMongoCollection().deleteOne({
|
|
key
|
|
});
|
|
},
|
|
async getKeys() {
|
|
return await getMongoCollection().find().project({
|
|
key: true
|
|
}).map(d => d.key).toArray();
|
|
},
|
|
async getMeta(key) {
|
|
const document = await getMongoCollection().findOne({
|
|
key
|
|
});
|
|
return document ? {
|
|
mtime: document.modifiedAt,
|
|
birthtime: document.createdAt
|
|
} : {};
|
|
},
|
|
async clear() {
|
|
await getMongoCollection().deleteMany({});
|
|
}
|
|
};
|
|
}); |