MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Добавете нов валидатор към съществуващата колекция

"Трябва" вероятно да добавя това с едно погрешно схващане във вашия въпрос. Факт е, че MongoDB се различава от традиционните RDBMS по това, че е "безсхемен" и всъщност изобщо не е необходимо да "създавате полета". Така че това се различава от "схема на таблица", където не можете да правите нищо, докато схемата не се промени. „Валидирането“ обаче е различно нещо, както и „все още“ сравнително нова функция към момента на писането.

Ако искате да "добавите правило за валидиране" тогава има методи, които зависят от текущото състояние на колекцията. И в двата случая всъщност няма функция „добавяне към“, но вместо това действието е „замяна“ на всички правилата за валидиране с нови за уточняване. Прочетете за правилата как работи това.

Съществуващи документи

Когато колекцията има съществуващи документи, както е отбелязано в документацията

Съществуващи документи

Можете да контролирате как MongoDB обработва съществуващи документи, като използвате validationLevel опция.

По подразбиране validationLevel е строго и MongoDB прилага правила за валидиране към всички вмъквания и актуализации. Задаване на validationLevel доумерено прилага правила за валидиране към вмъквания и актуализации на съществуващи документи, които отговарят на критериите за валидиране. Сумереното ниво, актуализациите на съществуващи документи, които не отговарят на критериите за валидиране, не се проверяват за валидност.

Този и следващия примерен раздел по същество казват, че в допълнение към опциите на .createCollection() можете също да модифицирате съществуваща колекция с документи, но трябва да внимавате, че настоящите документи може да не отговарят на изискваните правила. Затова използвайте "умерено" ако не сте сигурни, че правилото ще бъде спазено за всички документи в колекцията.

За да кандидатствате, използвате .runCommand() метод в момента за издаване на "командата", която задава правилата за валидиране. Което е "validationLevel" от пасажа по-горе.

Тъй като имате съществуващи правила, можем да използваме `.getCollectionInfos(), за да ги извлечем и след това да добавим новото правило и да го приложим:

let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;

validator.$or.push({ "LastLoginDate": { "$type": "date" } });

db.runCommand({
  "collMod": "MyTestCollection",
  "validator": validator,
  "validationLevel": "moderate"
});

Разбира се, както беше отбелязано по-горе, че ако сте уверени, че всички документи отговарят на условията, тогава можете да кандидатствате „стриктно“ вместо това по подразбиране.

Празна колекция

Ако в случая е, че колекцията действително е "празна" без никакви документи въобще или можете да "изпуснете" колекцията, тъй като текущите данни не са от значение, тогава можете просто да промените горното и да използвате .createCollection() в комбинация с .drop() :

let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;

validator.$or.push({ "LastLoginDate": { "$type": "date" } });

db.getCollection("MyTestCollection").drop();

db.createCollection( "MyTestCollection", { "validator": validator });


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB има ли вграден REST интерфейс?

  2. Грешка с невалиден идентификатор на курсора на mongodb

  3. Вземете най-новия запис от колекцията на mongodb

  4. Свързване с бази данни MongoDB

  5. Как мога да обещая собствения Javascript драйвер на MongoDB, използвайки bluebird?