MongoDB에서 기본 키를 설정하는 방법은 무엇입니까?


79

내 필드 중 하나를 기본 키로 설정하고 싶습니다 . 내가 사용하고 MongoDB를을 내 NoSQL에있다.

답변:


87

_id필드는 mongodb의 기본 키용으로 예약되어 있으며 고유 한 값이어야합니다. 아무것도 설정하지 않으면 _id자동으로 "MongoDB Id Object"로 채워집니다. 그러나 해당 필드에 고유 한 정보를 입력 할 수 있습니다.

추가 정보 : http://www.mongodb.org/display/DOCS/BSON

도움이 되었기를 바랍니다.


78
이 참에 응답하지 않습니다 how to set one of my fields as primary key내가 사용자 컬렉션에 키와 USER_EMAIL를 원하지만 어떻게 키와 독특한로 해당 필드를 설정 : 예
Medet Tleukabiluly

4
이 질문에 어떻게 대답합니까 ??
Lokesh Sanapalli

_id 필드는 기본 색인이며 고유해야합니다. 따라서 고유 한 제약 조건 인 데이터를 해당 필드에 배치하십시오. ( docs.mongodb.com/master/indexes/#default-id-index )
Steven Scott

24

다른 방법은 Indexes컬렉션을 만들고 고유한지 확인하는 것입니다.

다음 링크 에서 더 많은 것을 찾을 수 있습니다

실제로 이것은 매우 간단하고 구현하기 쉽습니다.


3
"인덱스에 대한 고유 제약 조건은 하나의 문서 만 컬렉션의 필드에 대한 값을 가질 수 있도록 보장합니다. 샤딩 된 컬렉션의 경우 삽입 및 인덱싱 작업이 각 샤드에 로컬이기 때문에 이러한 고유 인덱스는 고유성을 적용 할 수 없습니다."- docs.mongodb.org/ manual / tutorial /…
JohnC 2011

17

mongodb에서 _id 필드는 기본 키용으로 예약되어 있습니다. Mongodb는 객체에 정의하지 않은 경우 내부 ObjectId 값을 사용하고 성능을 보장하기 위해 인덱스도 생성합니다.

그러나 _id에 고유 한 값을 입력 할 수 있으며 Mongodb는이를 대신 사용합니다. 여러 필드를 기본 키로 사용하려는 경우에도 객체를 사용할 수 있습니다.

{ _id : { a : 1, b: 1} }

키 순서 (예제에서 a와 b)가 중요한 이러한 ID를 만들 때주의해야합니다. 키를 바꾸면 다른 개체로 간주됩니다.


13

RDBMS처럼 생각하면 기본 키를 만들 수 없습니다. 기본 기본 키는 _id입니다. 그러나 고유 인덱스를 만들 수 있습니다 . 예는 다음과 같습니다.

db.members.createIndex( { "user_id": 1 }, { unique: true } )

db.members.insert({'user_id':1,'name':'nanhe'})

db.members.insert({'name':'kumar'})

db.members.find();

출력은 다음과 같습니다.

{ "_id": ObjectId ( "577f9cecd71d71fa1fb6f43a"), "user_id": 1, "name": "nanhe"}

{ "_id": ObjectId ( "577f9d02d71d71fa1fb6f43b"), "name": "kumar"}

동일한 user_id를 삽입하려고하면 mongodb에서 쓰기 오류가 발생합니다.

db.members.insert({'user_id':1,'name':'aarush'})

WriteResult ({ "nInserted": 0, "writeError": { "code": 11000, "errmsg": "E11000 중복 키 오류 수집 : student.members 인덱스 : user_id_1 dup 키 : {: 1.0}"}})



6

이 동작을 달성하는 한 가지 방법은 _id기본 키로 처리하려는 사용자 지정 필드를 기반으로 값을 (MongoDB의 기본 키용으로 예약 된) 필드로 설정하는 것입니다.
employee_id, MongoDB에서 문서를 만들 때 기본 키로 원하는 경우 ; _id와 동일한 값을 할당 합니다 employee_id.


3

이것은 기본 키를 만드는 구문입니다.

db. <collection> .createIndex (<key and index type specification>, {unique : true})

데이터베이스에 student 라는 이름의 컬렉션이 있고 문서에는 기본 키를 만드는 데 필요한 student_id 라는 이름의 키가 있습니다. 그러면 명령은 다음과 같아야합니다.

db.student.createIndex({student_id:1},{unique:true})

학생 컬렉션에 중복 값을 추가 하여이 student_id 가 기본 키로 설정 되었는지 확인할 수 있습니다 .

자세한 정보는이 문서를 선호하십시오 https://docs.mongodb.com/manual/core/index-unique/#create-a-unique-index


3

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

이 링크를 확인하고 _id필드를 자동으로 늘릴 수도 있습니다.


20
참고 것을 링크 전용 답변 낙심, SO 응답 솔루션 (대 아직 시간이 지남에 따라 부패하는 경향 참조의 다른 경유지)에 대한 검색의 엔드 포인트이어야한다. 링크를 참조로 유지하면서 여기에 독립형 시놉시스를 추가하는 것을 고려하십시오.
kleopatra 2013-08-20

4
링크가 지금 고장, 따라서이 답변이 쓸모가
peterm는

2
페이지가 이제 "auto"또는 "increment"를 언급하지 않는 docs.mongodb.com/manual/crud로 리디렉션되기 때문에 거부되었습니다 .
die maus

2

Meteor에서 Mongo를 사용하는 경우 다음을 사용할 수 있습니다 _ensureIndex.

CollectionName._ensureIndex({field:1 }, {unique: true});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.