[MONGODB] MongoDB를 / 몽구스 :없는 경우는 null 독특한
MONGODBMongoDB를 / 몽구스 :없는 경우는 null 독특한
이 독특한 수집 항목을 강제하는 방법입니다하지만 항목이 널 (null)이 아닌 경우에만 있는지 궁금 해서요. 이자형 샘플 스키마 :
var UsersSchema = new Schema({
name : {type: String, trim: true, index: true, required: true},
email : {type: String, trim: true, index: true, unique: true}
});
이 경우 '이메일'은 필요하지 않지만 '이메일'저장하면 내가 (데이터베이스 수준)이 항목이 고유 있는지 확인하려면.
빈 항목이없는 이메일과 모든 항목이 '독특한'옵션으로 충돌 때문에 (아무 이메일로 다른 사용자가있는 경우) 값 '널'을 얻을 것으로 보인다.
지금은 응용 프로그램 수준에서 그것을 해결하지만,이 DB 쿼리를 저장 싶어요.
고마워
해결법
-
==============================
1.MongoDB를의 V1.8의로서 당신은 고유 값을 보장하지만 인덱스를 정의 할 때 true로 스파 스 옵션을 설정하여 필드없이 여러 문서를 허용 원하는 동작을 얻을 수 있습니다 +. 마찬가지로 :
MongoDB를의 V1.8의로서 당신은 고유 값을 보장하지만 인덱스를 정의 할 때 true로 스파 스 옵션을 설정하여 필드없이 여러 문서를 허용 원하는 동작을 얻을 수 있습니다 +. 마찬가지로 :
email : {type: String, trim: true, index: true, unique: true, sparse: true}
또는 셸에서 :
db.users.ensureIndex({email: 1}, {unique: true, sparse: true});
독특한 스파 스 인덱스가 여전히 null 값, 이메일 필드가없는 경우에만 여러 문서와 이메일 필드에 여러 문서를 허용하지 않습니다.
http://docs.mongodb.org/manual/core/index-sparse/ 참조
-
==============================
2.네, 독특한 "실제"값을 적용하면서, 필드를 NULL로 설정 여부를 정의와 여러 문서를 가질 수 있습니다.
네, 독특한 "실제"값을 적용하면서, 필드를 NULL로 설정 여부를 정의와 여러 문서를 가질 수 있습니다.
요구 사항 :
당신이 세부 사항에 관심이없는 경우, 구현 섹션으로 넘어가 셔도됩니다.
놀란의 대답 @ 보완하기 위해, MongoDB를 시작으로 당신이 필터 식으로 부분적인 고유 인덱스를 사용할 수 있습니다 V3.2.
부분 필터 표현은 제한이있다. 그것은 단지 다음을 포함 할 수 있습니다 :
이 수단은 사소한 표현 { "yourField"{$ NE : 널 (null)}}이 있음을 사용할 수 없습니다.
그러나, 당신의 분야는 항상 같은 종류를 사용하는 가정, 당신은 $ 형 식을 사용할 수 있습니다.
{ field: { $type: <BSON type number> | <String alias> } }
MongoDB를 V3.6의 배열로 전달 될 수있는 여러 가능한 유형을 특정하기위한 지원을 추가 :
{ field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }
이 허용 값은 여러 유형하지 널의 수 중 어느 하나 일 수있는 방법.
우리는, 바이너리 데이터 값을 두 문자열을 수락하거나, 말을 아래의 예에서 이메일 필드를 허용 할 경우에 따라서 적절한 $ 유형 표현은 다음과 같습니다
{email: {$type: ["string", "binData"]}}
당신은 몽구스 스키마를 지정할 수 있습니다 :
const UsersSchema = new Schema({ name: {type: String, trim: true, index: true, required: true}, email: { type: String, trim: true, index: { unique: true, partialFilterExpression: {email: {$type: "string"}} } } });
또는 직접 (기본 Node.js를 드라이버를 사용) 컬렉션에 추가합니다 :
User.collection.createIndex("email", { unique: true, partialFilterExpression: { "email": { $type: "string" } } });
collection.createIndex를 사용하여
db.collection('users').createIndex({ "email": 1 }, { unique: true, partialFilterExpression: { "email": { $type: "string" } } }, function (err, results) { // ... } );
db.collection.createIndex를 사용하여 :
db.users.createIndex({ "email": 1 }, { unique: true, partialFilterExpression: { "email": {$type: "string"} } })
이것은하지만 동일한 이메일 문자열, 널 이메일로 여러 레코드를 삽입 할 수 있도록, 또는 모두에서 이메일 필드가없는 것입니다.
-
==============================
3.이 주제를 연구하는 사람들에게 그냥 빨리 업데이트합니다.
이 주제를 연구하는 사람들에게 그냥 빨리 업데이트합니다.
선택한 대답은 작동하지만 대신 부분 인덱스를 사용하는 것을 고려 할 수 있습니다.
부분 인덱스에 대한 자세한 DOCO : https://docs.mongodb.com/manual/core/index-partial/
-
==============================
4.사실, 필드와 "이메일"존재하지 않는 경우에만 첫 번째 문서가 성공적으로 저장 얻을 것이다. "이메일"오류 (아래 코드 참조) 제공하면서 실패 존재하지 않는 경우 이후는 절약 할 수 있습니다. 고유 인덱스에 대한 존중과 http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes 여기 키를 누락과 MongoDB를 공식 문서에서 이유보기하십시오.
사실, 필드와 "이메일"존재하지 않는 경우에만 첫 번째 문서가 성공적으로 저장 얻을 것이다. "이메일"오류 (아래 코드 참조) 제공하면서 실패 존재하지 않는 경우 이후는 절약 할 수 있습니다. 고유 인덱스에 대한 존중과 http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes 여기 키를 누락과 MongoDB를 공식 문서에서 이유보기하십시오.
// NOTE: Code to executed in mongo console. db.things.ensureIndex({firstname: 1}, {unique: true}); db.things.save({lastname: "Smith"}); // Next operation will fail because of the unique index on firstname. db.things.save({lastname: "Jones"});
정의에 고유 인덱스는 하나 개의 값이 한 번만 저장 될 수 있습니다. 당신은 하나 개의 값으로 널 (null)을 고려하면 한 번만 삽입 할 수 있습니다! 당신은 보장하고 애플리케이션 수준에서의 유효성을 검사하여 접근 정확합니다. 즉,이 할 수있는 방법이다.
또한 http://www.mongodb.org/display/DOCS/Querying+and+nulls을 숙지하실 수 있습니다
from https://stackoverflow.com/questions/7955040/mongodb-mongoose-unique-if-not-null by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 수 () 찾아 ()의 차이. COUNT ()하여 MongoDB에서 (0) | 2019.12.02 |
---|---|
[MONGODB] 이 필드를 MongoDB에 존재하는지 확인 (0) | 2019.12.02 |
[MONGODB] 몽구스의 배열 스키마로 개체를 추진 (0) | 2019.12.02 |
[MONGODB] 어떻게 MongoDB의 모든 문서에 대한 필드 이름을 바꿀 수 있습니다? (0) | 2019.12.02 |
[MONGODB] 어떻게 쉘 스크립트를 통해 몽고 명령을 실행합니다? (0) | 2019.12.02 |