mongorai
Version:
Light MongoDB client for the web. Minimalistic UI used React with minimum dependencies.
131 lines (130 loc) • 4.62 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Collection = void 0;
const MongoDb = __importStar(require("mongodb"));
const JsonEncoder_1 = __importDefault(require("./JsonEncoder"));
class Collection {
get name() {
return this._collection.collectionName;
}
constructor(collection) {
this.countTimeout = parseInt(process.env.MONGORAI_COUNT_TIMEOUT, 10) || 5000;
this._collection = collection;
}
async findOne(document) {
const obj = await this._collection.findOne({
_id: new MongoDb.ObjectId(document)
});
return JsonEncoder_1.default.encode(obj);
}
find(query, project, sort, limit, skip) {
return this._collection.find(JsonEncoder_1.default.decode(query))
.project(project)
.sort(JsonEncoder_1.default.decode(sort))
.limit(limit)
.skip(skip)
.map((obj) => {
return JsonEncoder_1.default.encode(obj);
})
.toArray();
}
async updateOne(document, newObj, partial) {
const newValue = JsonEncoder_1.default.decode(newObj);
const update = partial ? { '$set': newValue } : JsonEncoder_1.default.decode(newValue);
await this._collection.replaceOne({
_id: new MongoDb.ObjectId(document)
}, update);
return JsonEncoder_1.default.encode(newValue);
}
async removeOne(document) {
await this._collection.deleteOne({
_id: new MongoDb.ObjectId(document)
});
}
async count(query) {
if (query) {
let decoded;
try {
decoded = JsonEncoder_1.default.decode(query);
}
catch (e) {
throw e;
}
if (decoded &&
typeof decoded === 'object' &&
!Array.isArray(decoded) &&
Object.keys(decoded).length > 0) {
return this._collection.countDocuments(decoded, {
maxTimeMS: this.countTimeout
}).catch(_ => this._collection.estimatedDocumentCount());
}
}
return this._collection.estimatedDocumentCount();
}
async toJson() {
let stats = {
size: 0,
count: 0,
avgObjSize: 0,
storageSize: 0,
capped: false,
nindexes: 0,
totalIndexSize: 0,
indexSizes: {}
};
try {
stats = await this._collection.stats();
}
catch (err) { }
;
return {
name: this.name,
size: (stats.storageSize || 0) + (stats.totalIndexSize || 0),
dataSize: stats.size,
count: stats.count,
avgObjSize: stats.avgObjSize || 0,
storageSize: stats.storageSize || 0,
capped: stats.capped,
nIndexes: stats.nindexes,
totalIndexSize: stats.totalIndexSize || 0,
indexSizes: stats.indexSizes
};
}
}
exports.Collection = Collection;