2016-11-28 117 views
0

我有一點設計問題。填充從一個集合到另一個集合減少數據流星Js

說香港專業教育學院有兩個類別:

Colletion A stores apples (_id , appleName) 

Collection B stores apple votes (_id , apple_id , enum(0,1)) 

我想,然後返回集合的一個基於降低apple_id集合B的爲0的值作爲財產返還1周的主要對象。 (如一個分數)

實施例的數據:

集合A排列

[{_id : 1, appleName : 'grannySmith'},{_id : 2, appleName : 'greenApple'},{_id : 3, appleName : 'anotherApple'}] 

集合B排列

[{_id : 1, appleId : 1, vote : 0}, {_id : 2, appleId : 1, vote : 1}, {_id : 3, appleId : 1, vote : 1}] 

從該進出口尋找集合的與減少B的返回

集合減少數組

[{_id : 1, appleName : 'grannySmith', score : 2},{_id : 2, appleName : 'greenApple'},{_id : 3, appleName : 'anotherApple'}] 

見,因爲它現在已經從降低集合B的與鏈接標識

2的比分
+0

您應該根據這些數據包括一些樣本數據和您的預期結果 – Khang

+0

@Khang歡呼,剛剛添加了一些。 –

回答

0

你可以使用聚合來實現它:

db.apple.aggregate([ 
    { 
    $lookup: { 
     from: 'score', 
     localField: '_id', 
     foreignField: 'appleId', 
     as: 'scores', 
    }, 
    }, { 
    $unwind: { 
     path: '$scores', 
     preserveNullAndEmptyArrays: true, 
    }, 
    }, { 
    $group: { 
     _id: '$_id', 
     appleName: { 
     $first: '$appleName', 
     }, 
     score: { 
     $sum: '$scores.vote', 
     } 
    }, 
    } 
]) 

注:我在使用$lookup此聚合的第一階段,您需要使用Mongo 3.2或更高版本才能運行。

+0

這似乎是更好的方式來做到這一點謝謝你,已經做了一個'蘋果'情況的粗略測試,所以將作爲完整的答案與此。 –

相關問題