English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB 자동 증가 시퀀스

MongoDB는 SQL 데이터베이스와 같은 개봉即可용 자동 증가 기능이 없습니다. 기본적으로, 그는_id필드의12Byte ObjectId는 문서를 유일하게 식별하는 주키입니다. 그러나 일부 경우에는 _id 필드가 ObjectId 외에도 자동 증가 값이 필요할 수 있습니다.

由于这不是MongoDB中的默认功能,因此我们将通过使用counters이 기능은 MongoDB의 기본 기능이 아니기 때문에, 우리는 이를 사용하여

MongoDB 문서가 추천하는 콜렉션을 프로그래밍 방식으로 구현합니다.

카운터 콜렉션을 사용하여아래를 참조하세요products1,2,3,4n에서 시작하는 자기 증가 정수 시퀀스로

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

이를 위해counters콜렉션을 생성하여 모든 시퀀스 필드의 마지막 시퀀스 값을 추적할 것입니다.

>db.createCollection("counters")

지금, 우리는 다음 문서를productidcounters 콜렉션에 키로 삽입합니다-

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

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

아래 코드를 사용하여 이 시퀀스 문서를 counters 콜렉션에 삽입합니다-

>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 함수를 사용하여

지금, 우리는 새 문서를 생성하고 반환된 시퀀스 값이 문서의 _id 필드로 할당될 때 getNextSequenceValue 함수를 사용할 것입니다.

아래 코드를 사용하여 두 개의 샘플 문서를 삽입합니다-

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

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

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

>db.products.find()

자동 증가하는 _id 필드를 가진 다음 문서가 반환되었습니다-

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