Каков наилучший способ проверки данных в монго? - PullRequest
10 голосов
/ 14 февраля 2010

Каков наилучший способ проверки данных, вставляемых или обновляемых в MongoDB? Это написать какой-нибудь исполняемый сервером код Javascript, который выполняет проверку?

Ответы [ 5 ]

10 голосов
/ 09 ноября 2015

Начиная с MongoDB 3.2 они добавили проверка документов ( слайды ).

Вы можете указать правила проверки для каждой коллекции, используя опцию validator , используя почти все операторы запроса монго (кроме $geoNear, $near, $nearSphere, $text и $where) .

Чтобы создать новую коллекцию с помощью валидатора, используйте:

db.createCollection("your_coll", {
  validator: { `your validation query` }
})

Чтобы добавить валидатор в существующую коллекцию, вы можете добавить валидатор:

db.createCollection("your_coll", {
  validator: { `your validation query` }
})

Проверка работает только при вставке / обновлении, поэтому при создании средства проверки в старой коллекции предыдущие данные проверяться не будут (вы можете написать проверку на уровне приложения для предыдущих данных). Вы также можете указать validationLevel и validationAction , чтобы сообщить, что произойдет, если документ не пройдет проверку.

Если вы попытаетесь вставить / обновить документ с чем-то, что не проходит проверку (и не указал какой-либо странный validationLevel / action), то вы получите ошибку на writeResult (к сожалению, ошибка не говорит вам, что не удалось, и вы получите только значение по умолчанию validation failed):

WriteResult({
   "nInserted" : 0,
   "writeError" : {
      "code" : 121,
      "errmsg" : "Document failed validation"
   }
})
6 голосов
/ 15 февраля 2010

MongoDB не имеет ограничений или триггеров, поэтому приложение должно проверять данные.

Вы также можете написать сценарии Javascript, которые проверяют один раз в день или больше, если есть недействительные данные. Вы можете использовать это для проверки качества бизнес-логики вашего приложения.

1 голос
/ 10 сентября 2013

Начиная с версии 2.4, MongoDB обеспечивает базовую проверку объектов BSON для mongod и mongorestore при записи в файлы данных MongoDB. Это препятствует тому, чтобы любой клиент вставил недействительный или искаженный BSON в базу данных MongoDB. источник: http://docs.mongodb.org/manual/release-notes/2.4/

1 голос
/ 14 февраля 2010

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

0 голосов
/ 14 января 2011

Я только что начал использовать MongoDB и PHP вместе в приложении на основе Zend Framework.

Я создал 1 объект для каждой коллекции MongoDB (например, User.php сопоставляется с коллекцией пользователей). Каждый объект знает, к какой коллекции он относится, и какие поля являются обязательными. Он также знает, какие фильтры ( Zend_Filter_Input ) и валидаторы ( Zend_Validate ) должны применяться к каждому полю. Перед выполнением вставки MongoDB () или save () я запускаю $ object-> isValid (), которая выполняет все валидаторы. Если все они пройдут, isValid () вернет true, и я продолжу запускать insert () или save (), в противном случае я отображаю ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...