복붙노트

[MONGODB] MongoDB를 복합 키

MONGODB

MongoDB를 복합 키

난 그냥 MongoDB를 시작하기 그리고 난 내가 고유 의미한다는 항목에 대한 중복 레코드를 많이 얻을 것으로 나타났습니다. 내 데이터에 대한 복합 키를 사용하고 내가 그들을 만드는 방법에 대한 정보를 찾고 있어요 방법을 알고 싶습니다. 귀하의 답변에 그 좋지 않을까 포함, 그래서 마지막으로, 나는 나의 ORM 레이어로 액세스 몽고와 모르핀에 자바를 사용하고 있습니다.

모르핀 : http://code.google.com/p/morphia/

해결법

  1. ==============================

    1.당신은뿐만 아니라 _id 필드 개체를 사용할 수 있습니다. _id 필드는 항상 고유합니다. 당신이 가지 복합 기본 키를 얻을 방법 :

    당신은뿐만 아니라 _id 필드 개체를 사용할 수 있습니다. _id 필드는 항상 고유합니다. 당신이 가지 복합 기본 키를 얻을 방법 :

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

    키의 순서 (예에서 a와 b는) 당신이 주변을 교환하는 경우, 그것은 다른 개체로 간주됩니다, 중요한 것은 이러한 ID를 만들 때 조심해.

    다른 가능성은 혼자 _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/

  2. ==============================

    2.당신은 당신이에 고유성 테스트 할 거라고 문서의 필드에 고유 인덱스를 만들 수 있습니다. 잘 (MongoDB의 토지 화합물 키 인덱스라고합니다) 당신이 문서에서 볼 수 있듯이 그들은 합성 할 수있다. 모르핀은 필드 레벨에서 지원 색인에 @Indexed 주석을 가지고있다. 모르핀과 또한 당신은 @Indexed 주해로 클래스 레벨에서 복합 키를 정의 할 수 있습니다.

    당신은 당신이에 고유성 테스트 할 거라고 문서의 필드에 고유 인덱스를 만들 수 있습니다. 잘 (MongoDB의 토지 화합물 키 인덱스라고합니다) 당신이 문서에서 볼 수 있듯이 그들은 합성 할 수있다. 모르핀은 필드 레벨에서 지원 색인에 @Indexed 주석을 가지고있다. 모르핀과 또한 당신은 @Indexed 주해로 클래스 레벨에서 복합 키를 정의 할 수 있습니다.

  3. ==============================

    3.난 그냥 당신이 좋아하는 일을 할 것, 그래서 질문은, "자바"로 표시되는 것으로 나타났습니다 :

    난 그냥 당신이 좋아하는 일을 할 것, 그래서 질문은, "자바"로 표시되는 것으로 나타났습니다 :

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

    나도 모르핀을 사용하지만 (작동 중에 있음)은 마샬에 복합 키를 시도로 오류가 많이 발생을 발견했다. 나는 이러한 오류를 방지하기 위해 쿼리 할 때 위의 사용합니다.

    (또한 작동) 내 원래 코드 :

    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입니다;

  4. from https://stackoverflow.com/questions/7222062/mongodb-composite-key by cc-by-sa and MIT license