Mongodb 중복 항목 방지
저는 mongodb의 초보자입니다.중복 입력을 방지하는 방법을 알 수 있을까요?관계형 테이블에서는 기본 키를 사용하여 이를 방지합니다.Java를 사용하여 Mongodb에서 지정하는 방법을 알 수 있습니까?
에서 인덱스 사용{unique:true}
선택.
// everyone's username must be unique:
db.users.createIndex({email:1},{unique:true});
여러 필드에서 이 작업을 수행할 수도 있습니다.자세한 내용 및 예제는 문서의 이 섹션을 참조하십시오.
고유 인덱스를 사용하면 인덱싱된 필드에 중복된 값이 저장되지 않습니다. 즉, 인덱싱된 필드에 고유성이 적용됩니다.기본적으로 MongoDB는 컬렉션을 만드는 동안 _id 필드에 고유 인덱스를 만듭니다.
원하신다면null
고유 키에서 무시할 값을 추가한 다음 인덱스를 희소하게 만들어야 합니다(여기 참조).sparse
옵션:
// everyone's username must be unique,
//but there can be multiple users with no email field or a null email:
db.users.createIndex({email:1},{unique:true, sparse:true});
MongoDB Java Driver를 사용하여 인덱스를 생성하려는 경우.시도:
Document keys = new Document("email", 1);
collection.createIndex(keys, new IndexOptions().unique(true));
이 작업은 권장되지 않지만 "_id" 필드를 사용하여 수행할 수 있습니다.이름이 고유하기를 원한다고 가정하면 "_id" 열에 이름을 넣을 수 있으며 "_id" 열은 각 항목에 대해 고유합니다.
BasicDBObject bdbo = new BasicDBObject("_id","amit");
이제 컬렉션에서 다른 항목의 이름을 "amit"로 지정할 수 없습니다.이것은 당신이 요청하는 방법 중 하나일 수 있습니다.
Mongo의 v3.0 Java 드라이버를 기준으로 인덱스를 만드는 코드는 다음과 같습니다.
public void createUniqueIndex() {
Document index = new Document("fieldName", 1);
MongoCollection<Document> collection = client.getDatabase("dbName").getCollection("CollectionName");
collection.createIndex(index, new IndexOptions().unique(true));
}
// And test to verify it works as expected
@Test
public void testIndex() {
MongoCollection<Document> collection = client.getDatabase("dbName").getCollection("CollectionName");
Document newDoc = new Document("fieldName", "duplicateValue");
collection.insertOne(newDoc);
// this will throw a MongoWriteException
try {
collection.insertOne(newDoc);
fail("Should have thrown a mongo write exception due to duplicate key");
} catch (MongoWriteException e) {
assertTrue(e.getMessage().contains("duplicate key"));
}
}
On 솔루션은 저에게 적합하지 않았지만, 이 솔루션은 다음과 같습니다.
BasicDBObject query = new BasicDBObject(<fieldname>, 1);
collection.ensureIndex(query, <index_name>, true);
나는 자바 프로그래머가 아니지만 당신은 아마 이것을 변환할 수 있을 것입니다.
MongoDB에는 기본적으로 다음과 같은 기본 키가 있습니다._id
사용할 수 있습니다.upsert()
또는save()
문서가 이렇게 두 번 작성되는 것을 방지하기 위해 이 키를 사용합니다.
var doc = {'name': 'sam'};
db.users.insert(doc); // doc will get an _id assigned to it
db.users.insert(doc); // Will fail since it already exists
복제가 즉시 중지됩니다.특정 조건에서 멀티 스레드 세이프 인서트와 관련하여, 음, 우리는 그 경우 당신의 상태에 대해 더 많이 알아야 합니다.
하지만 덧붙여야 할 것은_id
인덱스는 기본적으로 대기열이 아닙니다.
Pymongo를 사용하면 다음과 같이 보입니다.
mycol.create_index("id", unique=True)
여기서 myCol은 DB의 컬렉션입니다.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mycol.create_index("id", unique=True)
mydict = {"name": "xoce", "address": "Highway to hell 666", "id": 1}
x = mycol.insert_one(mydict)
mongoDB에서 중복 전자 메일 저장 방지
UserSchema.path('email').validate(async(email)=>{
const emailcount = await mongoose.models.User.countDocuments({email})
return !emailcount
}, 'Email already exits')
이것이 당신의 질문에 도움이 되기를...저를 위해 일했습니다.사용자 모델에서 사용합니다.설명을 참조하십시오. 감사합니다...
언급URL : https://stackoverflow.com/questions/12191311/mongodb-avoid-duplicate-entries
'prosource' 카테고리의 다른 글
버전 제어에 넣을 다중 Excel 문서에서 VBA 코드 내보내기 (0) | 2023.06.22 |
---|---|
ggplot: 면 그림 사이의 간격을 늘리는 방법은 무엇입니까? (0) | 2023.06.22 |
vuex 모듈에서 루트 상태를 기반으로 상수를 전역적으로 정의하는 방법 (0) | 2023.06.22 |
Git LFS 트랙 폴더 재귀 (0) | 2023.06.22 |
libclntsh.so .11.1: 공유 개체 파일을 열 수 없습니다. (0) | 2023.06.22 |