2016-06-08 3 views
1

코드 http://www.w3resource.com/mongodb/mongodb-elemmatch-projection-operators.php에이어서 ruby ​​mongodb 드라이버를 사용하여 테스트 데이터베이스를 설정했습니다.Ruby Mongo 드라이버 투영 Elemmatch

집에있는 사람들을 위해서는 우선 https://docs.mongodb.com/ecosystem/tutorial/ruby-driver-tutorial/#creating-a-client에 설명 된대로 mongo 드라이버를 설치 한 후 다음 명령을 실행해야합니다.

테스트 클라이언트 = [ '검사']

DOC : = 몽고 :: Client.new (데이터베이스 => 'MYDB를'[ '127.0.0.1:27017'])

클라이언트 = { "_id"=> 1 "배치"=> 10,452, "tran_details"=> [ { "수량"=> 200 "수다"=> 50 "MRP"=> 70 }, { "qty"=> 250, "수다"=> 50 "MRP"=> 60 } { "수량"=> 190 "수다"=> 55 "MRP"=> 75 } ] }

test.insert_one (문서)

삽입 W3 튜토리얼에서 만든 다른 문서의 모든. 당신은 W3 튜토리얼 예 2를 보면

, 번역 루비 발견은 다음과 같습니다.

test.find ({ "배치"=> 10452}) 투사 ({ "tran_details"=> { "$ to_a

이 예에서와 같은 결과를 반환합니다. "elemMatch"=> { "prate"=> { "prate"=> 50, "mrp" {{ "_id"=> 1, "tid_details"=> 200, "prate"=> 50, "mrp"=> 70}]} {{ "_id" => 3}

내 문제는 위의 제약 조건 (mrp gte 70 등)으로 결과를 제한하고 어떤 필드를 반환할지 지정하는 것입니다.

예를 들어, mrp gte 70을 갖는 tran_details만을 제한하지만 리턴 된 결과에는 prate 필드 (또는 필드의 서브 세트) 만 포함됩니다.

나는 쿼리에만 수다 필드를 반환 할 수 있습니다

test.find ({ "배치"=> 10452}) 투사 ({ "tran_details.prate"=> 1}) to_a..

두 가지 다른 예상 효과를 결합하고 싶습니다. 그러나 온라인에서 수행하는 방법에 대한 문서를 보지 못했습니다. 두 투영을 서로 문자열링하면 최종 투영 만 효과가 있습니다. 거기에 사람에게

답변

0

-

문제는 프로젝션에 $ elemMatch를 사용하여 하나 개의 요소까지 해결 될 수있다. 그러나 $ elemMatch는 처음 발견 된 결과 만 반환합니다.특정 기준에 맞는 여러 레이어가 포함 된 문서의 일부만 반환하려면 집계 프레임 워크를 사용해야합니다.

test.find({ 
    'tran_details.prate' => { '$gt' => 56 } 
}).projection({ 
    tran_details: { 
    '$elemMatch' => { 
     prate: { '$gt' => 56 } 
    } 
    }, 
    'tran_details.qty' => 1, 
    'tran_details.mrp' => 1, 
    batch: 1, 
    _id: 0 
}).to_a 

특정 조건에 맞는 여러 문서를 포함하는 문서의 일부만 반환하려면 집계 프레임 워크를 사용해야합니다. 여기

은 예제 코드

test.aggregate([{ 
    '$match': { 
     '$or': [ 
      {'batch': 10452}, {'batch': 73292}]}}, 
    {'$project': 
     {trans_details: 
      {'$filter': { 
      input: '$tran_details', 
      as: 'item', 
      cond: {'$and':[ 
       {'$gte' => ['$$item.prate', 51]}, 
       {'gt' => ['$$item.prate', 53]} 
      ]} 
      } 
     } 
    } 
}]).to_a 

사람이를보고 동적으로 문자열에서 루비에 알려 주시기 바랍니다 쿼리를 만드는 방법을 알고있는 경우

에게있다! bson과 관련이 있지만 여전히 관련 문서를 찾으려고합니다. 감사합니다 -

관련 문제