[MONGODB] 고유 한 사용자 ID의 저장 순서에 MongoDB의 자동 증가
MONGODB고유 한 사용자 ID의 저장 순서에 MongoDB의 자동 증가
내가 분석 시스템을 제작하고, API 호출은 고유 한 사용자 ID를 제공 할 수 있지만, 순서에없는 너무 스파 스.
나는 각각의 고유 한 사용자 ID에게 bitarray / 비트 세트의 분석 데이터 포인트를 표시 할 수있는 자동 증가 ID를 제공해야합니다. 제 1 사용자가 조우 bitarray의 첫 번째 비트에 해당 할 수 있도록, 사용자는 제 bitarray 등의 2 비트 것
그래서 MongoDB의 증분 고유 한 사용자 ID를 생성하는 견고하고 빠른 방법은 무엇입니까?
해결법
-
==============================
1.당신이 할 수있는,하지만 당신은 안 https://web.archive.org/web/20151009224806/http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/
당신이 할 수있는,하지만 당신은 안 https://web.archive.org/web/20151009224806/http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/
몽고 각 개체가 이미 ID를 가지며, 이들은 신청서에 정렬된다. 그것을 반복 및 증분 ID로 사용, 사용자 개체의 컬렉션을 받고 문제는 무엇인가? 어의 종류에 갈 완전히 작업을지도-감소
-
==============================
2.선택한 답변이 말했듯이 당신은 순차적으로 ID를 생성하는 findAndModify를 사용할 수 있습니다.
선택한 답변이 말했듯이 당신은 순차적으로 ID를 생성하는 findAndModify를 사용할 수 있습니다.
그러나 나는 강하게 당신이 그렇게 안된다는 의견에 동의하지 않는다. 그것은 모든 비즈니스 요구 사항에 따라 달라집니다. 12 바이트 ID를 갖는 일이 매우 많이 소요 자원 및 향후 확장 성이 크게 문제가 발생할 수 있습니다.
여기 답을 설명했다.
-
==============================
3.나는이 오래된 질문이다 알지만, 후대에 대한 내 대답을 게시하여야한다 ...
나는이 오래된 질문이다 알지만, 후대에 대한 내 대답을 게시하여야한다 ...
그것은 당신이 구축되는 시스템과 장소의 특정 비즈니스 규칙에 따라 달라집니다.
나는 대규모하여 MongoDB에서 CRM, C 번호 (백엔드 API) 및 각도 (프런트 엔드 웹 응용 프로그램)에 적당한을 구축하고 특정 엔티티를 선택하는 각도 라우팅에 사용 ObjectId가이 완전히 끔찍한 발견하고있다. API 컨트롤러 라우팅과 동일합니다.
제안은 위의 내 프로젝트에 대한 완벽했다.
db.contacts.insert({ "id":db.contacts.find().Count()+1, "name":"John Doe", "emails":[ "john@doe.com", "john.doe@business.com" ], "phone":"555111322", "status":"Active" });
그 이유는 내 경우를 위해 완벽하다, 모든 경우는 아니지만 당신이 컬렉션에서 3 개 레코드를 삭제할 경우 위의 주석 상태로, 당신은 충돌을 얻을 것입니다.
내 사업으로 인해 우리 집 SLA의, 우리는 내가 쓰고 있어요 응용 프로그램의 잠재적 인 수명보다 오래 대응 데이터 또는 고객 레코드를 삭제할 수 없으며, 열거 "상태"와 그에 대한, 나는 단순히 마크 기록을 그 상태 규칙 중 하나 인 "활성"또는 "삭제". 당신은 UI에서 뭔가를 삭제할 수 있습니다, 그것은 "연락처가 삭제 된"하지만 수행 한 모든 응용 프로그램이 "삭제"에 접촉 앱이 연락처 목록에 대한 respository를 호출, I 필터의 상태를 변경 말할 것이다 밖으로는 클라이언트 응용 프로그램에 데이터를 밀어 전에 기록을 삭제.
따라서, db.collection.find (). COUNT () + 1은 나를위한 완벽한 솔루션입니다 ...
그것은 모두를 위해 작동하지 않습니다,하지만 당신은 데이터를 삭제하지 않을 경우, 그것을 잘 작동합니다.
-
==============================
4.첫 번째 레코드 추가해야
첫 번째 레코드 추가해야
"_id" = 1 in your db $database = "demo"; $collections ="democollaction"; echo getnextid($database,$collections); function getnextid($database,$collections){ $m = new MongoClient(); $db = $m->selectDB($database); $cursor = $collection->find()->sort(array("_id" => -1))->limit(1); $array = iterator_to_array($cursor); foreach($array as $value){ return $value["_id"] + 1; } }
-
==============================
5.내 목적이을 발견하는 가장 좋은 방법은 당신이 현장에서 그 위해가 최대 값에서 증가했다, 나는 다음과 같은 구문을 사용 :
내 목적이을 발견하는 가장 좋은 방법은 당신이 현장에서 그 위해가 최대 값에서 증가했다, 나는 다음과 같은 구문을 사용 :
maxObj = db.CollectionName.aggregate([ { $group : { _id: '$item', maxValue: { $max: '$fieldName' } } } ]; fieldNextValue = maxObj.maxValue + 1;
$ fieldName에 당신의 필드의 이름이지만, $ 기호없이.
하는 콜렉션은 컬렉션의 이름입니다.
나는 () 수를 사용하고 있지 않다 그 이유는 생산 된 값이 기존 값을 만날 수 있다는 것입니다.
시행 고유 인덱스의 생성은 좀 더 안전하게 만들 수 있습니다 :
db.CollectionName.createIndex( { "fieldName": 1 }, { unique: true } )
-
==============================
6.나는 즉 내가 식별자로 사용할 수있는 고유 번호를 생성에 관심이 비슷한 문제를 가지고 있지만 필요가 없습니다. 나는 다음과 같은 솔루션을 함께했다. 컬렉션을 초기화 할 수 첫째 :
나는 즉 내가 식별자로 사용할 수있는 고유 번호를 생성에 관심이 비슷한 문제를 가지고 있지만 필요가 없습니다. 나는 다음과 같은 솔루션을 함께했다. 컬렉션을 초기화 할 수 첫째 :
fun create(mongo: MongoTemplate) { mongo.db.getCollection("sequence") .insertOne(Document(mapOf("_id" to "globalCounter", "sequenceValue" to 0L))) }
그리고 독특한 (오름차순) 숫자를 반환하는 서비스 :
@Service class IdCounter(val mongoTemplate: MongoTemplate) { companion object { const val collection = "sequence" } private val idField = "_id" private val idValue = "globalCounter" private val sequence = "sequenceValue" fun nextValue(): Long { val filter = Document(mapOf(idField to idValue)) val update = Document("\$inc", Document(mapOf(sequence to 1))) val updated: Document = mongoTemplate.db.getCollection(collection).findOneAndUpdate(filter, update)!! return updated[sequence] as Long } }
나는 ID가 다른 솔루션의 일부에서 겪을 수있는 동시 환경에 관련된 약점이 없음을 믿습니다.
from https://stackoverflow.com/questions/8384029/auto-increment-in-mongodb-to-store-sequence-of-unique-user-id by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] Model.find (). toArray () .toArray이없는 주장 () 메소드 (0) | 2019.12.04 |
---|---|
[MONGODB] 만들기 mongoose.js 쿼리는 동 기적으로 실행 (0) | 2019.12.04 |
[MONGODB] MongoDB를이 - $ 크기에 대한 인수는 배열해야하지만 유형이었다 EòÒ / 실종 (0) | 2019.12.04 |
[MONGODB] 어떻게 몽구스의 고유 값에 대한 쿼리는 무엇입니까? (0) | 2019.12.04 |
[MONGODB] MongoDB의 전체 및 부분 텍스트 검색 (0) | 2019.12.04 |