English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MongoDB는 SQL 데이터베이스와 같은 개봉即可용 자동 증가 기능이 없습니다. 기본적으로, 그는_id
필드의12Byte ObjectId는 문서를 유일하게 식별하는 주키입니다. 그러나 일부 경우에는 _id 필드가 ObjectId 외에도 자동 증가 값이 필요할 수 있습니다.
由于这不是MongoDB中的默认功能,因此我们将通过使用counters
이 기능은 MongoDB의 기본 기능이 아니기 때문에, 우리는 이를 사용하여
카운터 콜렉션을 사용하여아래를 참조하세요
products1,2,3,4n에서 시작하는 자기 증가 정수 시퀀스로
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles" }
이를 위해counters
콜렉션을 생성하여 모든 시퀀스 필드의 마지막 시퀀스 값을 추적할 것입니다.
>db.createCollection("counters")
지금, 우리는 다음 문서를productid
counters 콜렉션에 키로 삽입합니다-
> db.counters.insert({ "_id":"productid", "sequence_value": 0 ) WriteResult({ "nInserted" : 1 ) >
sequence_value 필드는 시퀀스의 마지막 값을 추적합니다。
아래 코드를 사용하여 이 시퀀스 문서를 counters 콜렉션에 삽입합니다-
>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 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"