Как заставить Монго проверять документы перед вставкой или обновлением в Vertx?

1

Я новичок с использованием Vertx, я создаю базовый Api Rest с Vertx + Mongo, используя Javascript.

Я ищу какой-то способ автоматической проверки входящих документов перед вставкой или обновлением (например, что-то вроде схемы в Mongoose).

Я получил следующее:

POST точка входа Вставка нового кота

var BodyHandler = require("vertx-web-js/body_handler");
var Router = require("vertx-web-js/router");
var router = Router.router(vertx);
router.post("/cat")
    .produces("application/json")
    .handler(BodyHandler.create().handle)
    .handler(controller.createCat);

Функция контроллера Вставка нового кота

createCat: function (ctx) {
  var response = ctx.response();
  var body = ctx.getBodyAsJson() || {};

  console.log('inserting cat')

  connection.mongoClient.insert("cats", { name: body.name }, function (res, res_err) {
    if (res_err == null) {
      var id = res;
      console.log("Inserted cat with id " + id);
      response.putHeader("content-type", "application/json");
      response.end(JSON.stringify(id));
    } else {
      console.log('err')
      res_err.printStackTrace();
    }
  });
}

Проблема в том, что я могу вставить пустые документы, получив документы только с одним полем: ID Монго.

TL; DR - я хочу знать, есть ли какой-нибудь способ сообщить Монго, что поле имени ВСЕГДА обязательно.

Теги:
vert.x

2 ответа

0

Вы можете создать свою собственную схему в отдельном файле json, а затем создать свой собственный метод проверки, когда контекст предоставляется вашим маршрутизатором.

Я предполагаю, что разные конечные точки имеют разные проверки.

Вы также можете создать промежуточное программное обеспечение, используя gateleen

у вас есть много вариантов, у mongoose есть свои преимущества, но весь смысл использования mongodb заключается не в создании схемы. Поэтому вы можете предположить, что запрос должен иметь определенные обязательные поля для проверки.

0

В mongodb есть концепция проверки с фильтрами запросов для сбора: https://docs.mongodb.com/manual/core/schema-validation/#query-expressions

Если поле "имя" всегда является обязательным, вы можете создать свою коллекцию следующим образом:

db.createCollection("cats", {
  validator: {
    $and: [ {"name": {$type: "string", $exists: true}} ]
})
  • 0
    Это не работает, Vertx doc говорит, что второй аргумент createCollection является функцией (функция обратного вызова, я полагаю?). Я думаю, что Vertx использует небольшую версию руководства MongoDB Java Driver Vertx Mongo . Я нашел это, но я не смог заставить его работать.
  • 0
    я не имел в виду его выполнение с драйвером vertx mongo, вы можете просто использовать командную строку mongo. Но если вы настаиваете на том, чтобы запускать его с драйвером vertx mongo, просто используйте функцию runCommand.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню