MongoDB automatycznie zwiększa
MongoDB nie jest taka sama jak na rosnące możliwości SQL automatycznie _id MongoDB jest 12 bajtów, który jednoznacznie identyfikuje system automatycznie wygenerowany.
Jednak w niektórych przypadkach możemy być zmuszeni do wdrożenia objectID funkcję automatycznego wzrostu.
Ponieważ MongoDB nie realizuje tej funkcji, możemy być zaprogramowany tak, aby osiągnąć, możemy osiągnąć następujące pola _id rosną automatycznie ograniczają kolekcji.
Kolekcja używać liczników
Rozważmy następującą dokumentację produktów. Mamy nadzieję osiągnąć z 1,2,3,4 _id pola do n funkcja automatycznego wzrostu.
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles" }
Aby to zrobić, należy utworzyć zestaw liczników, wartości pól automatyczna sekwencja może być długa:
>db.createCollection("counters")
Teraz możemy wstawić następujące dokumenty do liczników na gromadzenie, wykorzystywanie IDProduktu jako klucz:
{ "_id":"productid", "sequence_value": 0 }
Pole sequence_value jest sekwencja wartości przez automatyczny wzrost po.
Użyj następującej sekwencji poleceń do wstawienia liczników dokumentów z kolekcji:
>db.counters.insert({_id:"productid",sequence_value:0})
Tworzenie funkcji JavaScript
Teraz tworzymy funkcję getNextSequenceValue jako nazwy sekwencji wejściowej, określona sekwencja będzie automatycznie wzrastać o 1 i zwraca ostatnią wartość sekwencji. W przykładzie z tej serii artykułów o nazwie IDProduktu.
>function getNextSequenceValue(sequenceName){ var sequenceDocument = db.counters.findAndModify( { query:{_id: sequenceName }, update: {$inc:{sequence_value:1}}, new:true }); return sequenceDocument.sequence_value; }
Użyj funkcji JavaScript
Dalej będziemy używać funkcji getNextSequenceValue aby utworzyć nowy dokument i ustaw _id Dokument automatyczne wartość sekwencji zwracany jest:
>db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Apple iPhone", "category":"mobiles"}) >db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Samsung S3", "category":"mobiles"})
Jak widać, używamy funkcji getNextSequenceValue ustawienie pola _id.
W celu sprawdzenia skuteczności funkcji, możemy użyć następującego polecenia, aby przeczytać dokument:
>db.products.find()
Powyższe polecenie zwróci następujące wyniki, okazało pola _id jest samo wzrostu:
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"} { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }