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