2017-09-24 80 views
0

我需要做查找和加入一個子查詢與其他表。 子查詢將有匹配的列。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); 
    }); 
}); 

我有FO求出平均FOM useravrage表的查詢將返回

userid average 
1  67 
2  56 
3  40 

現在我需要顯示此平均usedetails表中選擇

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

我的問題是我的拳頭使用不是一張桌子。 它的另一個查詢將提供一個對象數組

+0

請添加您的用戶收藏夾和平均值。也告訴用戶和平均有一對一或一對多關係? –

回答

0

您可以在即將到來的3.6(當前位於3.5.13 dev)版本中使用新的lookup pipeline變體在管道中運行平均查詢並將結果返回到本地集合。

$lookup管道提供子查詢,將計算出平均每個用戶ID,然後$replaceRoot & $mergeObjects移動average到頂層。

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 
    } 
    } 
])