2013-02-27 3 views
0

몽고가 나를 위해 숫자를 증가 시켜서 그 번호를 호출하고 나서 그 번호에서 문자열을 생성하도록하고 싶습니다.node.js, mongo 고유 번호를 유지하는 빠른 방법

x = 1e10 
x.toString(36).substring(2,7) 

>>'dqpds' 

나는 몽고

db.counter.update({ _id: 1 }, { $inc: { seq: 1 } }, {upsert: true}, 
    function(err, val){ 
    //... 
}) 

에서 호출 할 때마다 수를 증가하는 방법이하지만 내가 5 문자를받을 것을 시작 등으로 1E10 같은 뭔가 수를 설정하려면 긴 문자열,하지만 난 오히려 뭔가 데이터베이스에 하나 이상의 호출을하고 싶습니다.

mongo에서 upsert의 기본값을 설정하는 방법. 또는 고유 한 5 - 6 자 문자열을 생성하는보다 효율적인 방법이 있습니까?

답변

1

, 당신은을 사용할 수 있습니다 ObjectId의 첫 부분. 위의 문서에서

는 설명이 :

a 4-byte timestamp, 
a 3-byte machine identifier, 
a 2-byte process id, and 
a 3-byte counter, starting with a random value. 

그래서 당신은 다음과 같이 수행 할 수 있습니다 :

ObjectId가가 12 바이트 BSON 타입, 사용하여 구성

x = ObjectId().toString().subString(0,4) 

이 접근 방식은 데이터베이스 IO를 포함하지 않으므로 성능이 향상됩니다. 고유성에 대해 더 자세히 알고 싶다면 카운터의 마지막 2 바이트를 추가하여 6자를 하나 만드십시오.

+0

그래, 이것을 사용할 것입니다. –

0

MongoDB에서이를 수행 할 수있는 방법이 있습니다.

당신은 findAndModify 명령을 사용하여 그것은 당신이 여기 찾고있는 정확하게 상황에 자세히 설명 : 당신은 반드시 순차적이 아닌 고유 ID가 필요한 경우

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/

+0

이 항목은 여러 항목에 걸쳐 자동으로 증가하는 필드를위한 것입니다. 컬렉션의 항목 하나만 원할뿐 아니라 기본 값 문제를 해결하지 못합니다. 이 순간의 해결 방법은 응용 프로그램 시작시 DB를 확인하는 것입니다. 그러나 ID는 더 간결한 것을 선호합니다. –

+0

이것은 하나의 항목에 대한 것입니다. 그리고 당신이 원하는 어떤 값으로 시작할 수 있습니다. (시작시 확인하면, 앱을 다시 시작할 때마다 리사이클을하지 않겠습니까?) –