programing

MongoDB 및 "가입"

css3 2023. 4. 5. 22:05

MongoDB 및 "가입"

MongoDB가 공식적으로 'joins'를 지원하는 건 아닐 거예요.이것은 무엇을 의미합니까?

"두 컬렉션(테이블)을 연결할 수 없습니다"라는 의미입니까?

제 생각엔 우리가 가치있게 생각해보면_idother_idCollection B collect 、 Collection 、 Collection 、 Collection 、 Collection ?

제 이해가 맞다면, 예를 들어 쿼리를 실행할 때 MongoDB는 두 개의 테이블을 연결할 수 있습니다.이것은, http://www.mongodb.org/display/DOCS/Schema+Design 에 기재된 「Reference」에 의해서 행해집니다.

그럼 '조인'이란 게 무슨 뜻이죠?

MongoDB 스키마 디자인을 배우는 데 필수적이기 때문에 답을 알고 싶습니다.http://www.mongodb.org/display/DOCS/Schema+Design

필요할 때만 관계가 평가되기 때문에 가입은 안 된다.반면 (SQL 데이터베이스에서) 조인하면 관계가 해결되고 단일 테이블인 것처럼 반환됩니다('2개의 테이블을 하나로 조인').

DBRef에 대한 자세한 내용은 http://docs.mongodb.org/manual/applications/database-references/를 참조하십시오.

참조를 해결하기 위한 두 가지 해결 방법이 있습니다.하나는 거의 설명한 바와 같이 수동으로 수행하는 것입니다.문서의 _id를 다른 문서의 other_id에 저장한 후 자신의 함수를 작성하여 관계를 해결합니다.다른 솔루션은 위의 매뉴얼페이지에 기재되어 있는 DBRef를 사용하여 MongoDB가 클라이언트 과의 관계를 온 디맨드로 해결할 수 있도록 하는 것입니다.어느 솔루션을 선택하든 상관관계가 클라이언트 측에서 해결되기 때문에 크게 중요하지 않습니다(SQL 데이터베이스는 서버 측에서 조인을 해결합니다).

데이터베이스는 문서 간 결합 또는 자동 "연결"을 수행하지 않습니다.단, 고객 측에서 직접 수행할 수 있습니다.2를 실행할 필요가 있는 경우는 괜찮습니다만, 2000을 실행할 필요가 있는 경우는, 클라이언트/서버의 턴어라운드의 수에 의해서 동작이 느려집니다.

MongoDB에서는 일반적인 패턴이 내장되어 있습니다.정규화할 때 관계형에서 사물이 여러 부분으로 나뉩니다.mongo에서는 이러한 조각이 하나의 문서로 끝나는 경우가 많기 때문에 조인할 필요가 없습니다.그러나 필요할 때는 클라이언트 측에서 수행합니다.

ORDER, ORDER-LINEITEM의 전형적인 예를 생각해 보겠습니다.1개의 주문과 8개의 행은 관계형입니다.MongoDB에서는 보통 이것을 1개의 BSON 문서로서 모델화합니다.이것은 내장된 행의 항목이 배열된 주문입니다.따라서 이 경우 가입 문제는 발생하지 않습니다.단, 주문에는 고객님이 포함되어 있습니다.고객은 아마 다른 컬렉션일 것입니다.클라이언트는 주문 문서에서 cust_id를 읽고 필요에 따라 개별적으로 주문서를 가져올 수 있습니다.

제가 믿는 mongodb.org 웹사이트에는 스키마 디자인 강연용 비디오와 슬라이드가 있습니다.

mongoDB에서 쿼리에 참여하기 위한 한 가지 유형은 일치하는 ID를 하나의 컬렉션에서 묻고 ID를 목록(idlist)에 넣으며 $in : idlist와 함께 다른(또는 동일한) 컬렉션에서 사용하는 것을 찾는 것입니다.

u = db.friends.find({"friends": something }).toArray()
idlist= []
u.forEach(function(myDoc) { idlist.push(myDoc.id ); } )
db.family.find({"id": {$in : idlist} } )

링크의 첫 번째 예시는 MongoDB 참조가 결합이 아니라 느린 로딩과 같이 동작하는 방법을 보여줍니다.두 컬렉션 모두에 대해 발생하는 쿼리는 없으며, 한 컬렉션에 대해 쿼리한 다음 참조를 통해 다른 컬렉션에서 항목을 검색합니다.

mongoDB가 관계형이 아니라는 사실이 일부 사람들에게 mongoDB를 쓸모없다고 생각하게 만들었다.DB를 설계하기 전에 당신이 무엇을 하고 있는지 알아야 한다고 생각합니다.MongoDB와 같은 noSQL DB를 사용하는 경우 스키마를 구현하는 것이 좋습니다.이렇게 하면 컬렉션이 SQL 데이터베이스의 테이블과 비슷해집니다.또, 효율상의 이유로 필요한 경우를 제외하고, 디노멀라이제이션(임베디드)은 피해 주세요.

독자적으로 noSQL 데이터베이스를 설계하고 싶다면 Firebase 문서를 참조하는 것이 좋습니다.고객이 서비스를 위해 데이터를 구성하는 방법을 이해하면 유사한 패턴을 쉽게 설계할 수 있습니다.

다른 사람들이 지적한 것처럼 조인 클라이언트 측에서 해야 합니다만, Meteor(Javascript 프레임워크)를 제외하고, 이 패키지로 서버 측에서 조인할 수 있습니다(다른 프레임워크는 모릅니다).단, 이 선택지를 선택하기 전에 이 기사를 읽어보시기 바랍니다.

편집 28.04.17: 최근 Firebase는 noSql 데이터베이스 설계에 관한 우수한 시리즈를 발표했습니다.또한 에피소드 중 하나에서 가입을 피해야 하는 이유와 데이터베이스를 정규화하지 않음으로써 이러한 시나리오를 회피하는 방법을 강조했습니다.

mongoose를 사용하는 경우 다음과 같이 사용할 수 있습니다(하위 문서 및 채우기를 사용하는 경우).

Profile.findById profileId
  .select 'friends'
  .exec (err, profile) ->
    if err or not profile
      handleError err, profile, res
    else
      Status.find { profile: { $in: profile.friends } }, (err, statuses) ->
        if err
          handleErr err, statuses, res
        else
          res.json createJSON statuses

취득합니다.Statuses둘 중 하나에 속합니다.Profile(profileId) 친구.친구는 다른 사람에 대한 참조 배열이다.Profiles.Profile와 스키마하다.friends정의:

schema = new mongoose.Schema
  # ...

  friends: [
    type: mongoose.Schema.Types.ObjectId
    ref: 'Profile'
    unique: true
    index: true
  ]

나는 같은 게시물 - "Mongodb Joins"와 대안 또는 동등한 것을 찾는 많은 게시물을 발견했다.그래서 제 답변은 저와 같은 많은 사람들에게 도움이 될 것입니다.이게 내가 찾던 답이야.

Express 프레임워크에서 Mongoose를 사용하고 있습니다.라고 하는 기능이 있습니다.Population조인을 대신해서.

몽구스 문서에 언급된 바와 같이.

MongoDB에는 가입이 없지만 다른 컬렉션에 있는 문서에 대한 참조가 필요할 수 있습니다.이것이 바로 인구가 필요한 부분입니다.

이 StackOverflow 답변은 사용 방법에 대한 간단한 예를 보여 줍니다.

언급URL : https://stackoverflow.com/questions/4067197/mongodb-and-joins