MongoDB-자동 증가 시퀀스

MongoDB에는 SQL 데이터베이스와 같이 즉시 사용 가능한 자동 증가 기능이 없습니다. 기본적으로 12 바이트 ObjectId를 사용합니다._id문서를 고유하게 식별하기위한 기본 키로 필드. 그러나 _id 필드에 ObjectId 이외의 일부 자동 증가 값이 있기를 원하는 시나리오가있을 수 있습니다.

이것은 MongoDB의 기본 기능이 아니기 때문에 프로그래밍 방식으로 counters MongoDB 문서에서 제안한 컬렉션.

카운터 수집 사용

다음을 고려하세요 products문서. _id 필드가auto-incremented integer sequence 1,2,3,4부터 n까지.

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

이를 위해 counters 컬렉션은 모든 시퀀스 필드의 마지막 시퀀스 값을 추적합니다.

>db.createCollection("counters")

이제 카운터 컬렉션에 다음 문서를 삽입합니다. productid 그것의 열쇠로-

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

필드 sequence_value 시퀀스의 마지막 값을 추적합니다.

카운터 컬렉션에이 시퀀스 문서를 삽입하려면 다음 코드를 사용하십시오.

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

자바 스크립트 함수 생성

이제 우리는 함수를 만들 것입니다 getNextSequenceValue시퀀스 이름을 입력으로 사용하고 시퀀스 번호를 1 씩 증가시키고 업데이트 된 시퀀스 번호를 반환합니다. 우리의 경우 시퀀스 이름은productid.

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

보시다시피 getNextSequenceValue 함수를 사용하여 _id 필드의 값을 설정했습니다.

기능을 확인하기 위해 find 명령을 사용하여 문서를 가져 오겠습니다.

>db.products.find()

위의 쿼리는 자동 증가 _id 필드가있는 다음 문서를 반환했습니다.

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