복붙노트

[MONGODB] MongoDB의 관계 : 포함 또는 참조?

MONGODB

MongoDB의 관계 : 포함 또는 참조?

관계형 데이터베이스 배경에서 오는 - 나는 MongoDB의 새로운입니다. 나는 약간의 의견에 질문의 구조를 설계 할,하지만 난 의견에 사용할 관계 모르겠어요 포함하거나 참조를?

일부 의견과 질문은, 유래처럼,이 같은 구조를 가지고 것입니다 :

Question
    title = 'aaa'
    content = bbb'
    comments = ???

처음에 나는이 같은 임베디드 의견을 (내가 삽입이 MongoDB를 권장 생각)를 사용하려면 :

Question
    title = 'aaa'
    content = 'bbb'
    comments = [ { content = 'xxx', createdAt = 'yyy'}, 
                 { content = 'xxx', createdAt = 'yyy'}, 
                 { content = 'xxx', createdAt = 'yyy'} ]

그것은 취소,하지만 난이 사건에 대해 걱정 해요 : 내가 편집에 지정된 주석을 원하는 경우에, 어떻게 그것의 내용과 질문을받을 수 있나요? 더 _id 내가 하나를 찾을 수 없으며, question_ref 날의 질문을 찾을 수 없습니다. (나는 _id와 question_ref없이이 작업을 수행 할 수있는 방법이 있다면 내가 모르는, 초보자 그래서입니다.)

나는 포함되지 심판 사용해야합니까? 그럼 난 덧글에 대한 새 컬렉션을 만들 수 있나요?

해결법

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

    1.이것은 더 과학보다 예술이다. 스키마에 몽고 문서는 좋은 참조하지만, 여기에 고려해야 할 몇 가지 사항은 다음과 같습니다 :

    이것은 더 과학보다 예술이다. 스키마에 몽고 문서는 좋은 참조하지만, 여기에 고려해야 할 몇 가지 사항은 다음과 같습니다 :

    당신이 설명하는 무엇을 위해, 나는 주석을 포함 할 것, 그리고 OBJECTID 각 주석에게 id 필드를 제공합니다. ObjectId가 당신이 좋아하는 경우에 당신이 그것을 사용하는 대신 만들 수 있도록에 포함 된 타임 스탬프를 가지고있다.

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

    2.일반적으로, 당신은 일대일 또는 일대 엔티티 사이의 관계가있는 경우 삽입이 좋다, 당신은 다 대다 관계가있는 경우 참조가 좋다.

    일반적으로, 당신은 일대일 또는 일대 엔티티 사이의 관계가있는 경우 삽입이 좋다, 당신은 다 대다 관계가있는 경우 참조가 좋다.

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

    3.당신은 하위 문서에서 조회 할 수 있습니다 db.question.find ({ 'comments.content': 'XXX'을}).

    당신은 하위 문서에서 조회 할 수 있습니다 db.question.find ({ 'comments.content': 'XXX'을}).

    이 모든 질문의 문서를 반환합니다. 편집에 지정된 주석, 당신은 다음, 클라이언트의 의견을 찾아야 편집과 DB에 그 뒤 저장을합니다.

    문서 객체의 배열을 포함하는 경우 일반적으로, 당신은 그 하위 개체가 클라이언트 측을 수정해야합니다 것을 확인할 수 있습니다.

  4. ==============================

    4.글쎄, 난 조금 늦었하지만 여전히 스키마 창조의 길을 공유하고 싶습니다.

    글쎄, 난 조금 늦었하지만 여전히 스키마 창조의 길을 공유하고 싶습니다.

    난 당신이 고전적인 OOP에서 할 것 같은 단어에 의해 설명 될 수 있습니다 모두를위한 스키마가있다.

    EG

    나는 각 스키마이를 선언 할 수 있도록 모든 스키마, 문서 또는 하위 문서로 저장할 수 있습니다.

    문서:

    하위 문서 :

  5. ==============================

    5.내 자신이 문제를 연구하는 동안 나는이 작은 프리젠 테이션을 가로 질러왔다. 나는,이 배치되었다 얼마나 잘에 정보와 그것의 표현 모두를 놀라게했다.

    내 자신이 문제를 연구하는 동안 나는이 작은 프리젠 테이션을 가로 질러왔다. 나는,이 배치되었다 얼마나 잘에 정보와 그것의 표현 모두를 놀라게했다.

    http://openmymind.net/Multiple-Collections-Versus-Embedded-Documents

    그것은 요약 :

  6. ==============================

    6.나는이 꽤 오래 알고 있지만 당신은 단지 지정된 코멘트를 반환하는 방법에 대한 영업 이익의 질문에 대한 답을 찾고 있다면, 당신은이 같은 $ (쿼리) 연산자를 사용할 수 있습니다 :

    나는이 꽤 오래 알고 있지만 당신은 단지 지정된 코멘트를 반환하는 방법에 대한 영업 이익의 질문에 대한 답을 찾고 있다면, 당신은이 같은 $ (쿼리) 연산자를 사용할 수 있습니다 :

    db.question.update({'comments.content': 'xxx'}, {'comments.$': true})
    
  7. ==============================

    7.예, 우리는 단지처럼 다른 문서를 채우는 document.To에서 참조를 사용할 수있는 SQL 내가 joins.In 몽고 DB가 필요 없다 우리가 우리의 시나리오를 이행 할 채우기를 사용할 수있는 많은 관계 document.Instead에 매핑 하나에 조인 ..

    예, 우리는 단지처럼 다른 문서를 채우는 document.To에서 참조를 사용할 수있는 SQL 내가 joins.In 몽고 DB가 필요 없다 우리가 우리의 시나리오를 이행 할 채우기를 사용할 수있는 많은 관계 document.Instead에 매핑 하나에 조인 ..

    var mongoose = require('mongoose')
      , Schema = mongoose.Schema
    
    var personSchema = Schema({
      _id     : Number,
      name    : String,
      age     : Number,
      stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
    });
    
    var storySchema = Schema({
      _creator : { type: Number, ref: 'Person' },
      title    : String,
      fans     : [{ type: Number, ref: 'Person' }]
    });
    

    인구 자동 다른 모음 (들)로부터 문서 (들)과 문서에서 지정된 경로를 교환하는 과정이다. 우리는 하나의 문서, 여러 문서, 일반 객체, 다수의 일반 개체 또는 쿼리에서 반환 된 모든 개체를 채울 수 있습니다. 몇 가지 예를 살펴 보자.

    더 나은 당신이 더 많은 정보하시기 바랍니다 방문을 얻을 수 있습니다 : HTTP : //mongoosejs.com/docs/populate.html

  8. ==============================

    8.당신은 하나 또는 다른를 사용하는 경우는 내가 알고 참고로이 퀴즈를 생성

    당신은 하나 또는 다른를 사용하는 경우는 내가 알고 참고로이 퀴즈를 생성

    http://indie-rok.github.io/embedded-vs-reference-mongo-db

  9. ==============================

    9.아무도 UML 사양에 대해 언급하지 왜 실제로, 나는 매우 궁금 하군요. 엄지 손가락의 규칙은 집계가있는 경우, 당신은 참조를 사용해야한다는 것입니다. 가 조성 인 경우에, 그 결합은 강력하고, 당신이 포함 된 문서를 사용해야합니다.

    아무도 UML 사양에 대해 언급하지 왜 실제로, 나는 매우 궁금 하군요. 엄지 손가락의 규칙은 집계가있는 경우, 당신은 참조를 사용해야한다는 것입니다. 가 조성 인 경우에, 그 결합은 강력하고, 당신이 포함 된 문서를 사용해야합니다.

    그것은 논리적 인 이유 그리고 당신은 신속하게 이해할 것이다. 객체가 부모 독립적으로 존재할 수있는 경우에, 당신은 심지어 부모가 존재하지 않는 경우 액세스하려는 것입니다. 그냥 존재하지 않는 부모에 그것을 포함 할 수 없습니다, 당신은 그것을 자신의 데이터 구조에 거주해야한다. 그리고 부모 존재하는 경우, 단지 부모의 객체의 심판을 추가하여 함께 연결합니다.

    정말 두 관계의 차이점은 무엇 몰라? 다음은이를 설명하는 링크입니다 :  UML의 구성 VS 집계

  10. ==============================

    10.당신이 의견의 수와 변경하고 싶은 주석의 인덱스의 트랙을 유지했다면, 당신은 도트 연산자 (SO 예)를 사용할 수 있습니다.

    당신이 의견의 수와 변경하고 싶은 주석의 인덱스의 트랙을 유지했다면, 당신은 도트 연산자 (SO 예)를 사용할 수 있습니다.

    당신은 f.ex. 할 수

    db.questions.update(
        {
            "title": "aaa"       
        }, 
        { 
            "comments.0.contents": "new text"
        }
    )
    

    (다른 방법으로 질문 내부의 주석을 편집)

  11. from https://stackoverflow.com/questions/5373198/mongodb-relationships-embed-or-reference by cc-by-sa and MIT license