MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dodaj nowy Validator do istniejącej kolekcji

"Powinienem" prawdopodobnie poprzedzić to jednym błędnym przekonaniem w twoim pytaniu. Faktem jest, że MongoDB różni się od tradycyjnych RDBMS tym, że jest „bez schematu” i tak naprawdę nie trzeba w ogóle „tworzyć pól”. Różni się to więc od „schematu tabeli”, w którym nie można nic zrobić, dopóki schemat się nie zmieni. „Weryfikacja” to jednak inna rzecz, a także „wciąż” stosunkowo nowa funkcja od samego pisania.

Jeśli chcesz „dodać regułę walidacji” następnie istnieją metody zależne od aktualnego stanu kolekcji. W obu przypadkach tak naprawdę nie ma funkcji „dodaj do”, ale zamiast tego działanie polega na „zastąpieniu” wszystkich zasady walidacji z nowymi do określenia. Przeczytaj zasady, jak to działa.

Istniejące dokumenty

Gdzie kolekcja posiada istniejące dokumenty, jak zaznaczono w dokumentacji

Istniejące dokumenty

Możesz kontrolować, jak MongoDB obsługuje istniejące dokumenty, korzystając z validationLevel opcja.

Domyślnie VidationLevel jest surowy MongoDB stosuje reguły walidacji do wszystkich wstawek i aktualizacji. Ustawianie poziomu walidacji do umiarkowania stosuje reguły walidacji do wstawek i aktualizacji istniejących dokumentów, które spełniają kryteria walidacji. Z umiarkowanym na poziomie, aktualizacje istniejących dokumentów, które nie spełniają kryteriów walidacji, nie są sprawdzane pod kątem ważności.

Ta i następna sekcja przykładowa zasadniczo mówi, że oprócz opcji w .createCollection() możesz również modyfikować istniejącą kolekcję za pomocą dokumentów, ale należy być „ostrożnym”, aby obecne dokumenty nie spełniały wymaganych zasad. Dlatego użyj "umiarkowany" jeśli nie masz pewności, reguła zostanie spełniona dla wszystkich dokumenty w kolekcji.

Aby złożyć wniosek, użyj .runCommand() obecnie metoda wydawania "polecenia" ustalającego zasady walidacji. Czym jest „Poziom walidacji” z powyższego fragmentu.

Ponieważ masz już istniejące reguły, możemy użyć `.getCollectionInfos(), aby je pobrać, a następnie dodać nową regułę i zastosować:

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

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

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

Oczywiście, jak wspomniano wcześniej, jeśli masz pewność, że wszystkie dokumenty spełniają warunki, możesz zastosować „ściśle” jako domyślny.

Pusta kolekcja

Jeśli w takim przypadku kolekcja jest faktycznie „pusta” bez żadnych dokumentów lub możesz "upuścić" kolekcję, ponieważ bieżące dane nie mają znaczenia, możesz po prostu zmienić powyższe i użyć .createCollection() w połączeniu z .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. Identyfikatory Mongo prowadzą do przerażających adresów URL

  2. Przestaw wiersze na kolumny w MongoDB

  3. Mongoose - wyszukiwanie poddokumentów według kryteriów

  4. MongoDB $pullAll

  5. Przedstawiamy ClusterControl 1.4.2 — edycję DevOps