MongoDB 자동 증가
MongoDB에는 SQL과 같은 자동 증가 기능이 없습니다. MongoDB의 _id는 시스템에서 자동으로 생성되는 12바이트 고유 식별자입니다.
그러나 경우에 따라 ObjectId 자동 증가 기능을 구현해야 할 수도 있습니다.
MongoDB는 이 기능을 구현하지 않으므로 프로그래밍 방식으로 구현할 수 있습니다. 카운터 컬렉션에서 _id 필드의 자동 증가를 구현합니다.
카운터 컬렉션 사용
다음 제품 문서를 고려하세요. 우리는 _id 필드를 구현하기를 원합니다. 1,2,3,4에서 n까지 자동 증가 기능.
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles" }
이를 위해 카운터 컬렉션을 생성하면 시퀀스 필드 값이 자동으로 커질 수 있습니다.
>db.createCollection("counters")
이제 productid를 키로 사용하여 다음 문서를 카운터 컬렉션에 삽입합니다.
{ "_id":"productid", "sequence_value": 0 }
sequence_value 필드는 시퀀스 이후의 값은 자동으로 증가합니다.
다음 명령을 사용하여 카운터 컬렉션의 시퀀스 문서에 삽입합니다.
>db.counters.insert({_id:"productid",sequence_value:0})
Javascript 함수 생성
이제 시퀀스 이름에 대한 입력으로 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; }
Javascript 함수 사용
다음으로 getNextSequenceValue 함수를 사용하여 새 문서를 생성하겠습니다. 그리고 문서 _id를 반환된 시퀀스 값으로 자동 설정합니다.
>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 필드를 설정합니다.
함수가 유효한지 확인하기 위해 다음 명령을 사용하여 문서를 읽을 수 있습니다.
>db.products.find()
위 명령은 다음 결과를 반환하며 _id 필드가 자동으로 증가하는 것을 확인합니다.
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"} { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }