Latest web development tutorials

자동 증가 MongoDB를

MongoDB를 자동으로 성장 SQL 기능과 같은이없는, MongoDB를의 _id 고유 자동으로 생성 시스템을 식별하는 12 바이트입니다.

그러나, 일부 경우에, 우리는 특히 ObjectId에게 자동 증가 기능을 구현할 필요가있다.

MongoDB를이 기능을 구현하지 않기 때문에, 우리가 달성하기 위해 프로그래밍 할 수 있습니다, 우리는 자동으로 수집 카운터 다음 _id 필드가 성장을 달성 할 것입니다.


사용 카운터 수집

다음 제품 설명서를 고려한다. 우리는 1,2,3,4 _id 필드에 N 자동 증가 기능에서 달성 할 수 있도록 노력하겠습니다.

{
  "_id":1,
  "product_name": "Apple iPhone",
  "category": "mobiles"
}

이를 위해, 카운터 세트를 생성 자동 시퀀스 필드 값은 길 수 :

>db.createCollection("counters")

이제 우리는 컬렉션의 카운터, 키로서 사용 제품 ID에 다음의 서류를 삽입 :

{
  "_id":"productid",
  "sequence_value": 0
}

sequence_value 필드 후 자동 증가에 의한 값의 순서입니다.

컬렉션의 문서 카운터를 삽입하려면 다음 명령 시퀀스를 사용하여

>db.counters.insert({_id:"productid",sequence_value:0})

자바 스크립트 기능 만들기

이제, 우리는 입력 시퀀스 이름 getNextSequenceValue 함수를 생성 지정된 시퀀스는 1 씩 자동 증가하여 최신 순서 값을 반환한다. 이 문서 시리즈의 예에서 제품 ID를했다.

>function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify(
      {
         query:{_id: sequenceName },
         update: {$inc:{sequence_value:1}},
         new:true
      });
   return sequenceDocument.sequence_value;
}

자바 스크립트 기능을 사용하여

다음으로 우리는 새로운 문서를 작성하고 반환 된 문서 _id 자동 시퀀스 값이 설정 getNextSequenceValue 기능을 사용합니다 :

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Apple iPhone",
   "category":"mobiles"})

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Samsung S3",
   "category":"mobiles"})

당신이 볼 수 있듯이, 우리는 _id 필드를 설정하는 데 getNextSequenceValue 함수를 사용합니다.

기능의 효과를 확인하기 위해 문서를 읽고 다음 명령을 사용할 수있다 :

>db.products.find()

위의 명령은 우리가 _id 필드가 자기 성장입니다 발견, 다음과 같은 결과를 반환합니다 :

{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}

{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }