2010-02-13 2 views
9

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

+2

[Монго 3,2] (http://stackoverflow.com/a/33602507/1090562) будет иметь подтверждение. –

ответ

1

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

6

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

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

0

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

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

1

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

7

Начиная с MongoDB 3,2 они добавили document validation (slides).

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

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

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

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

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

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

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

WriteResult({ 
    "nInserted" : 0, 
    "writeError" : { 
     "code" : 121, 
     "errmsg" : "Document failed validation" 
    } 
}) 
Смежные вопросы