Latest web development tutorials

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" }