programing

MongoDB 복합 키

telecom 2023. 6. 29. 19:47
반응형

MongoDB 복합 키

MongoDb를 시작한 지 얼마 되지 않아 고유한 항목에 대한 중복 레코드가 많이 생성됩니다.내 데이터에 복합 키를 사용하는 방법과 생성 방법에 대한 정보를 찾고 있습니다.마지막으로, 저는 자바를 사용하여 mongo와 morphia를 ORM 레이어로 액세스하고 있으므로 답변에 포함하는 것이 멋질 것입니다.

모르피아: http://code.google.com/p/morphia/

_id 필드에도 개체를 사용할 수 있습니다._id 필드는 항상 고유합니다.이렇게 하면 복합 기본 키를 얻을 수 있습니다.

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

이러한 ID를 생성할 때는 키 순서(예에서 a 및 b)가 중요하며, 키를 서로 교환하면 다른 개체로 간주된다는 점에 주의하십시오.

다른 가능성은 _id를 그대로 두고 고유한 복합 인덱스를 생성하는 것입니다.

db.things.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
//Deprecated since version 3.0.0, is now an alias for db.things.createIndex()

https://docs.mongodb.org/v3.0/reference/method/db.collection.ensureIndex/

고유성을 테스트할 문서의 필드에 고유 색인을 작성할 수 있습니다.설명서에서 볼 수 있듯이 복합 키 인덱스(MongoDB 랜드에서는 복합 키 인덱스라고 함)도 사용할 수 있습니다.Morphia는 그것을 가지고 있습니다.@Indexed필드 수준에서 인덱싱을 지원하는 주석입니다.morphia와 더불어 클래스 레벨에서 복합 키를 정의할 수 있습니다.@Indexed주석

질문이 "java"로 표시되어 있으므로 다음과 같은 작업을 수행할 수 있습니다.

final BasicDBObject id = new BasicDBObject("a", aVal)
        .append("b", bVal)
        .append("c", cVal);
results = coll.find(new BasicDBObject("_id", id));

저도 Morphia를 사용하지만, 복합 키를 마셜링하려고 할 때 (작동하는 동안) 많은 오류가 발생한다는 것을 발견했습니다.이러한 오류를 방지하기 위해 쿼리할 때 위의 내용을 사용합니다.

내 원래 코드(작동하기도 함):

final ProbId key = new ProbId(srcText, srcLang, destLang);
final QueryImpl<Probabilities> query = ds.createQuery(Probabilities.class)
  .field("id").equal(key);
Probabilities probs = (Probabilities) query.get();

내 ProbId 클래스는 다음과 같이 주석이 달립니다.@Entity(noClassnameStored = true)그리고 확률 클래스 내부의 id 필드는@Id ProbId id;

예를 들어 설명하겠습니다.

  1. 작성table음악
  2. 더하다Artist로서primary key

이제 아티스트가 많은 노래를 가지고 있을 수 있기 때문에 우리는 해결해야 합니다.sort key둘의 조합은 다음과 같습니다.composite key.

그 의미는,Artist+SongTitle고유할 것입니다.

다음과 같은 것:

{
"Artist" : {"s" : "David Bowie"},
"SongTitle" : {"s" : "changes"},
"AlbumTitle" : {"s" : "Hunky"},
"Genre" : {"s" : "Rock"},
}

Artist위의 키는 다음과 같습니다.Partition Key SongTitle위의 키는 다음과 같습니다.sort key

둘의 조합은 항상 고유하거나 고유해야 합니다.나머지는 레코드마다 다를 수 있는 속성입니다.

이 데이터 구조가 설정되면 사용자 지정 쿼리에 따라 쉽게 추가하고 검색할 수 있습니다.

참조용 샘플 Mongo 쿼리:

db.products.insert(json file path)
db.collection.drop(json file path)
db.users.find(json file path)

언급URL : https://stackoverflow.com/questions/7222062/mongodb-composite-key

반응형