2017-09-24 1 views
0

조회를 수행하고 하나의 하위 쿼리를 anothe 테이블에 조인해야합니다. 하위 쿼리에는 일치하는 colunm이 있습니다.mongo aggegate 테이블이있는 하위 쿼리/커서에 대한 검색

var ids= // subquery/cursor which will have customer and average; 
    db.user.aggregate([ 

     { "$unwind": "$ids" }, 
     {$lookup: 
     { 
      from: "ids", 
      localField: "customer", 
      foreignField: "customer", 
      as: "average" 
     } 
    } 
    ],function (err, result) { 
     console.log(result); 
     res.json(result); 
    }); 
}); 

내가 내 문제가

userid username average 
1  lijo  67 
2  jh  56 
3  ghj  40 

입니다 usedetails 테이블이 평균 선택

userid average 
1  67 
2  56 
3  40 

지금 내가 보여줄 필요가 돌아갑니다 평균 FOM의 useravrage 테이블을 찾는 FO 쿼리를 내 주먹 useaveage는 테이블이 아닙니다. 객체 배열을 제공하는 또 다른 쿼리

+0

사용자 신고서 및 평균을 추가하십시오. 또한 사용자와 평균이 일대일 또는 일대일 또는 다중 관계를 가지고 있다고 말합니까? –

답변

0

다음 버전 3.6 (현재 3.5.13 dev) 버전에서 새로운 lookup pipeline 변형을 사용하여 파이프 라인에서 평균 쿼리를 실행하고 결과를 로컬 컬렉션에 다시 결합 할 수 있습니다 .

$lookup 파이프 라인은 상위 레벨로 이동하기 average$replaceRoot & $mergeObjects이어서 각 사용자 ID에 대한 평균을 계산한다 서브 질의를 제공한다.

db.userdetails.aggregate([ 
    { 
    "$lookup": { 
     "from": "useraverage", 
     "let": { 
     "userid": "$userid" 
     }, 
     "pipeline": [ 
     { 
      "$match": { 
      "$expr": { 
       "$eq": [ 
       "$userid", 
       "$$userid" 
       ] 
      } 
      } 
     }, 
     rest of your subquery 
     ], 
     "as": "average" 
    } 
    }, 
    { 
    "$replaceRoot": { 
     "newRoot": { 
     "$mergeObjects": [ 
      { 
      "$arrayElemAt": [ 
       "$average", 
       0 
      ] 
      }, 
      "$$ROOT" 
     ] 
     } 
    } 
    }, 
    { 
    "$project": { 
     "average": 0 
    } 
    } 
]) 
관련 문제