2012-05-28 3 views
0

저는 MongoDB in Action을 읽었으며 문서에서 다 대다 관계를 쿼리 할 때 Ruby 드라이버를 사용하여 어떻게 그의 예제 쿼리를 작성했는지 이해하는 데 어려움이 있습니다. .MongoDB에서 다 대다 관계를 쿼리하십시오.

쿼리는 productscategory 컬렉션이있는 특정 범주의 모든 제품을 찾습니다.

db.products.find({category_ids => category['id']}) 

제품 문서는 다음과 같이이다 :

doc = 
{ _id: new ObjectId("4c4b1476238d3b4dd5003981"), 
    slug: "wheel-barrow-9092", 
    sku: "9092", 
    name: "Extra Large Wheel Barrow", 
    description: "Heavy duty wheel barrow...", 

    details: { 
    weight: 47, 
    weight_units: "lbs", 
    model_num: 4039283402, 
    manufacturer: "Acme", 
    color: "Green" 
    }, 

    category_ids: [new ObjectId("6a5b1476238d3b4dd5000048"), 
        new ObjectId("6a5b1476238d3b4dd5000049")], 

    main_cat_id: new ObjectId("6a5b1476238d3b4dd5000048"), 

    tags: ["tools", "gardening", "soil"], 

} 

그리고 CATEGORY의 문서는 다음과 같이이다 : 저자는 원예 용 도구 범주에있는 모든 제품을 조회하려면 코드가 간단하다 "라고

doc = 
{ _id: new ObjectId("6a5b1476238d3b4dd5000048"), 
    slug: "gardening-tools", 
    ancestors: [{ name: "Home", 
       _id: new ObjectId("8b87fb1476238d3b4dd500003"), 
       slug: "home" 
       }, 

       { name: "Outdoors", 
       _id: new ObjectId("9a9fb1476238d3b4dd5000001"), 
       slug: "outdoors" 
       } 
    ], 

    parent_id: new ObjectId("9a9fb1476238d3b4dd5000001"), 

    name: "Gardening Tools", 
    description: "Gardening gadgets galore!", 
} 

은 누군가가 나에게 좀 더 설명해 주시겠습니까? 나는 아직도 이해할 수없는 그가 쓴 어떻게 쿼리 :(

감사합니다.

답변

3

쿼리 category_ids

특정 값에 대한 배열을 포함하는 필드를 검색, MongoDB를 자동으로 해당 배열의 각 값이 검색 열거 분야에서 category['id']의 값으로 모든 제품에 대한 제품 콜렉션을 검색한다 일치합니다. 합니다 (_id 필드에서 MongoDB를 평소와 같이, 저장)

당신은해야

먼저 category 수집하여 범주 계층 구조를 정의 통지해야하며, 쿼리를 구성하고, 각 카테고리는 고유 한 ID를 가지고하려면 또한 product 컬렉션에는 컬렉션의 고유 ID를 참조하는 범주 ID 목록 인 category_ids을 저장하는 필드가 있음을 알 수 있습니다. 따라서

, 당신은 당신이 category 모음에서 얻을 관심있는 카테고리의 고유 ID의 product 수집의 category_ids 필드를 검색, 특정 카테고리의 모든 제품을 찾을 수 있습니다.

나는 몽고의 자바 스크립트 기반의 쉘 인터프리터, 원예 도구 카테고리에서 제품을 찾을 수 mongo에 대한 쿼리를 작성한다면, 나는 다음을 수행합니다 :

  1. 원예 도구 카테고리의 ID를 검색 이 경우
    • (전술 한 바와 같이, category 컬렉션의 _id 필드에 저장되어있는) 사용자의 실시 예에서의 값 ObjectId("6a5b1476238d3b4dd5000048")
  2. 이다 db.products.find({category_ids : new ObjectId("6a5b1476238d3b4dd5000048")})
:
  • product 수집
    • 이의 category_ids 필드를 통해 검색 쿼리에 값을 삽입하면이 mongo 쉘 내가로 작성합니다 귀하의 질문에주는 쿼리입니다

      원본 설명보다 더 명확하길 바랍니다.

      (다른 질문으로, 귀하의 쿼리가 작성된 언어가 확실하지 않습니다. PHP일까요? 자바 스크립트는 MongoDB 문서의 예제에서 선택한 언어로 보입니다. MongoDB 서버 mongo 명령 줄 해석기를 서버 자체와 함께 설치하므로 모든 사람이 액세스 할 수 있습니다.

  • +0

    감사합니다. Mongodb in Action 책은 이와 같은 언어 예제에 Ruby 코드를 사용하고 있습니다. – Bohn

    +0

    그래서 그의 예에서 'id'는 특별한 의미가 있으며 그대로 전달되어야합니다. 그것이 혼란 스럽습니다. – Bohn

    +0

    책을 볼 수 없으면'category_id'는 저자가 원하는 범주의 ID로 채운 배열/변수 일 수 있습니다 (위의 대답 1 단계). 나는 루비를 모른다. 그래서 코드를 해석하는 법을 알기가 어렵다. 받아 줘서 고마워 :) – chrisbunney