2013-04-12 6 views
0

이것은 제품 모음에있는 문서의 예입니다.MongoDB : 특정 하위 문서 선택

object(MongoId)#8 (1) { 
    ["$id"]=> 
    string(24) "5165b2c8ac951ab812000001" 
} 
int(0) 
array(7) { 
    [0]=> 
    array(2) { 
    ["sValue"]=> 
    string(10) "1223828372" 
    ["iPosX"]=> 
    int(0) 
    } 
    [1]=> 
    array(2) { 
    ["sValue"]=> 
    string(12) "Epson EB-S11" 
    ["iPosX"]=> 
    int(1) 
    } 
    [2]=> 
    array(2) { 
    ["sValue"]=> 
    string(6) "Beamer" 
    ["iPosX"]=> 
    int(2) 
    } 
    [3]=> 
    array(2) { 
    ["sValue"]=> 
    string(48) "TV>>Beamer & Projektoren|Epson EB-S11-1300742000" 
    ["iPosX"]=> 
    int(3) 
    } 
    [4]=> 
    array(2) { 
    ["sValue"]=> 
    string(6) "398.00" 
    ["iPosX"]=> 
    int(4) 
    } 
    [5]=> 
    array(2) { 
    ["sValue"]=> 
    string(85) "http://www.myshop.com/product-1223828372.html" 
    ["iPosX"]=> 
    int(5) 
    } 
    [6]=> 
    array(2) { 
    ["sValue"]=> 
    string(5) "Epson" 
    ["iPosX"]=> 
    int(6) 
    } 
} 

이 컬렉션의 제품을 선택하고 싶지만 모든 하위 문서를 선택하고 싶지 않습니다. 예를 들면 :이 문서에서 iPosX가 1, 2 또는 4 인 하위 문서를 가져오고 싶습니다.

구체적으로 :이 제품을 더한 iPosX 필드 내가이 작업을 수행 할 수있는 방법 1, 2 또는 4

있는 하위 문서의 모든 정보가 필요하십니까?

미리 감사드립니다. 최대

답변

1

당신의 가장 좋은 방법은 2.2 MongoDB를에 Aggregation Framework을 사용하는 것입니다

db.products.aggregate(
    // Optional: could include a $match to limit the matching documents 

    // Create a stream of documents from the products array 
    { $unwind: "$products" }, 

    // Filter the matching products 
    { $match: { 
     "products.iPosX": { $in: [1,2,4] } 
    }}, 

    // Reshape output so matched products are at top level of results 
    { $project: { 
     _id: 0, 
     sValue: "$products.sValue", 
     iPosX: "$products.iPosX", 
    }} 
) 

예 출력 :

또한 투표 할 수 있습니다
{ 
    "result" : [ 
     { 
      "sValue" : "Epson EB-S11", 
      "iPosX" : 1 
     }, 
     { 
      "sValue" : "Beamer", 
      "iPosX" : 2 
     }, 
     { 
      "sValue" : "398.00", 
      "iPosX" : 4 
     } 
    ], 
    "ok" : 1 
} 
+0

/기능 요청을보고 [SERVER-6612 ] (https://jira.mongodb.org/browse/SERVER-6612)를 MongoDB Jira 문제 추적기에 추가하십시오. 이 기능 제안은 일반적인'find()'질의 (예를 들어'$ elemMatch'와 유사하지만 첫 번째 만 찾은 것 대신 모든 일치하는 요소를 반환)에서 투영 지시자를 사용하여 다중 배열 값을 투영하는 것을 지원하는 것입니다. – Stennie