Как "mongoose" обрабатывает добавление документов, которые имеют FIELDS, которые являются частью схемы __NOT__?
Я играю с быстрым руководством для мангуста.
http://mongoosejs.com/docs/index.html
Я предположил, что это вызовет ошибку, когда я сохраню документ с полем, НЕ определенным в схеме. Вместо этого он создал новый документ в коллекции, но без поля. (Примечание: я понимаю, что сам mongodb является "без схемы", поэтому каждый документ в коллекции может быть полностью отличным друг от друга.)
два вопроса
- Как
mongoose
обрабатывать добавление документов с полями НЕ части схемы? Похоже, что он просто игнорирует их, и если ни одна из карт полей не создаст пустой документ только с ObjectId.
- И как вы получаете
mongoose
, чтобы предупредить вас, если конкретное поле документа не было добавлено, хотя документ успешно сохранен?
(Вопрос в том, что я считаю - достаточно простой, поэтому я не добавил код, но обязательно буду, если кто-то попросит.)
Спасибо.
Ответы
Ответ 1
В: Как дескриптор мангуста добавляет документы, у которых есть поля, которые НЕ являются частью схемы?
Строгая опция (включена по умолчанию) гарантирует, что значения, переданные нашему конструктору модели, которые не были указаны в нашей схеме, не сохраняются в db. - документы mongoose
В: Как вы получаете мангуст, чтобы предупредить вас, если определенное поле документа не было добавлено, хотя документ успешно сохранен?
Строгая опция также может быть настроена на "бросок", что приведет к ошибкам для производства вместо того, чтобы сбросить плохие данные. - документы mongoose
... но если вам абсолютно необходимо сохранить ключи, не входящие в схему, тогда вам придется самому справиться с этим. Два подхода, о которых я могу думать, следующие:
1. Чтобы сохранить ключи, не входящие в схему, вы можете установить strict
в false на конкретную модель экземпляр или на конкретное обновление. Затем вам нужно будет написать некоторую проверку: (a) значения в документе соответствуют вашим стандартам и (b) документ, сохраненный в базе данных, соответствует документу, который вы отправили.
2. Вы могли бы увидеть, может ли тип смешанной схемы удовлетворить ваши потребности, а не отключать проверки, которые приходят с strict
. (Прокрутите вниз до "примечаний об использовании" по этой ссылке, так как ссылка на документацию "Смешанная" на данный момент нарушена.)
Ответ 2
Mongoose позволяет добавлять "валидатор" и "предварительное" промежуточное программное обеспечение, которое выполняет полезные функции. Например, вы можете указать атрибут required
в своей схеме, чтобы указать, что необходимо установить определенное свойство. Вы также можете указать validator
, который вы можете создать, чтобы выбросить ошибку, если связанное свойство не соответствует вашим требованиям. Вы также можете настроить Mongoose "pre" validator
, который анализирует документ и выдает ошибку, если он обнаружит поля, которые находятся за пределами вашей схемы. Имея вызов промежуточного программного обеспечения next()
(или нет), вы можете контролировать, переходите ли вы к сохранению документа (или нет).
Этот вопрос/ответ в stackoverflow может помочь выяснить, имеет ли объект свойство.