Я хочу разработать конечную точку, которая будет принимать команды MongoDB и запускать их непосредственно в базе данных, как это делает robomongo, и возвращать результаты. Это может быть что угодно (вставить, обновить, прочитать, удалить и т. Д.). Я использую мангуст, поэтому способ сделать это можно с помощью мангуста или чистого кода монго.
Я думал об использовании чего-то вроде:
let code = eval(stringOfMongoCode);
db.eval(code);
Но я подумал, что это должен быть лучший способ, потому что db.eval () устарела с версии 3.0, и в настоящее время я использую версию 3.6 mongo.
Есть идеи, как это сделать?
Редактировать 1: Это то, что я делал до сих пор. Это работает, и я смог запустить что-нибудь в базе данных и ответить результатами (я удалил некоторый код):
app.post('/v1/query', async function (req, res) {
try {
let code = `(function() { ${req.body.code} })`;
code = eval(code);
const mongoose = require("mongoose");
const db = mongoose.connection.db;
let result = await db.eval(code);
res.status(200);
return res.json(BaseController.buildResponse(true, 'Database code executed', null, result));
} catch (err) {
console.error(err);
res.status(500);
return res.json(BaseController.buildResponse(false, 'Error running your code on the database', err));
}
});
Я все еще хотел бы улучшить свой код, не используя db.eval()
и иметь возможность возвращать результаты чего-либо.