Подтвердить что ты не робот

Как "mongoose" обрабатывает добавление документов, которые имеют FIELDS, которые являются частью схемы __NOT__?

Я играю с быстрым руководством для мангуста.

http://mongoosejs.com/docs/index.html

Я предположил, что это вызовет ошибку, когда я сохраню документ с полем, НЕ определенным в схеме. Вместо этого он создал новый документ в коллекции, но без поля. (Примечание: я понимаю, что сам mongodb является "без схемы", поэтому каждый документ в коллекции может быть полностью отличным друг от друга.)

два вопроса

  • Как mongoose обрабатывать добавление документов с полями НЕ части схемы? Похоже, что он просто игнорирует их, и если ни одна из карт полей не создаст пустой документ только с ObjectId.
  • И как вы получаете mongoose, чтобы предупредить вас, если конкретное поле документа не было добавлено, хотя документ успешно сохранен?

(Вопрос в том, что я считаю - достаточно простой, поэтому я не добавил код, но обязательно буду, если кто-то попросит.)

Спасибо.

4b9b3361

Ответ 1

В: Как дескриптор мангуста добавляет документы, у которых есть поля, которые НЕ являются частью схемы?

Строгая опция (включена по умолчанию) гарантирует, что значения, переданные нашему конструктору модели, которые не были указаны в нашей схеме, не сохраняются в db. - документы mongoose

В: Как вы получаете мангуст, чтобы предупредить вас, если определенное поле документа не было добавлено, хотя документ успешно сохранен?

Строгая опция также может быть настроена на "бросок", что приведет к ошибкам для производства вместо того, чтобы сбросить плохие данные. - документы mongoose

... но если вам абсолютно необходимо сохранить ключи, не входящие в схему, тогда вам придется самому справиться с этим. Два подхода, о которых я могу думать, следующие:

1. Чтобы сохранить ключи, не входящие в схему, вы можете установить strict в false на конкретную модель экземпляр или на конкретное обновление. Затем вам нужно будет написать некоторую проверку: (a) значения в документе соответствуют вашим стандартам и (b) документ, сохраненный в базе данных, соответствует документу, который вы отправили.

2. Вы могли бы увидеть, может ли тип смешанной схемы удовлетворить ваши потребности, а не отключать проверки, которые приходят с strict. (Прокрутите вниз до "примечаний об использовании" по этой ссылке, так как ссылка на документацию "Смешанная" на данный момент нарушена.)

Ответ 2

Mongoose позволяет добавлять "валидатор" и "предварительное" промежуточное программное обеспечение, которое выполняет полезные функции. Например, вы можете указать атрибут required в своей схеме, чтобы указать, что необходимо установить определенное свойство. Вы также можете указать validator, который вы можете создать, чтобы выбросить ошибку, если связанное свойство не соответствует вашим требованиям. Вы также можете настроить Mongoose "pre" validator, который анализирует документ и выдает ошибку, если он обнаружит поля, которые находятся за пределами вашей схемы. Имея вызов промежуточного программного обеспечения next() (или нет), вы можете контролировать, переходите ли вы к сохранению документа (или нет).

Этот вопрос/ответ в stackoverflow может помочь выяснить, имеет ли объект свойство.