2016-12-28 128 views
0

我正在彙總一個大數據,我需要根據它們的類型對數據進行分組,還需要查找來自另一個collections.inside $組的數據,我希望查找數據。 我對聚合代碼是這樣:

NotificationSchema.aggregate([{ 
    $match: condition 
}, { 
    $group: { 
    _id: "$type", 
    details: { 
     $push: "$$ROOT" 
    }, 
    count: { 
     $sum: 1 
    } 
    } 
}, { 
    $sort: { 
    _id: -1 
    } 
}, { 

    $lookup: { 
    from: "vehicles", 
    localField: "details.device_id", 
    foreignField: "device_id", 
    as: "vehicle" 
    } 
}], function(err, result) { 
    if (err) { 
    res.status(500); 
    return res.json({ 
     result: err 
    }); 
    } 
    console.log('res', result[0].details[0]); 
    res.json({ 
    result: result 
    }); 
}); 

如果我刪除或註釋$組碼我與車輛陣列中的數據,但使用$組我得到車輛陣列空,因爲我只有兩個記錄類型在數據庫中,我得到了兩個空車陣列。但我有102條記錄,所以我需要102輛車的陣列,我怎麼能得到這樣的結果。 什麼我得到在控制檯現在是

res [ { _id: 'Vehicle Delay Alert!', 
    details: 
    [ [Object], 
     ....57 object... 
     [Object] ], 
    count: 57, 
    vehicle: [] }, 

,每個對象內,我不找車陣,所以我想從這裏取出車輛陣列和獲取從每一個對象在$查找產生的車輛陣列。 任何建議,非常感謝。

回答

0

$lookupdetails.device_id它來自一個數組。爲了$lookup從常規字段,可以在$match後放置$lookup

NotificationSchema.aggregate([{ 
    $match: condition 
}, { 
    $lookup: { 
     from: "vehicles", 
     localField: "device_id", 
     foreignField: "device_id", 
     as: "vehicle" 
    } 
}, { 
    $group: { 
     _id: "$type", 
     details: { 
      $push: "$$ROOT" 
     }, 
     count: { 
      $sum: 1 
     } 
    } 
}, { 
    $sort: { 
     _id: -1 
    } 
}]) 
+0

我欠你的,先生。我也想限制只有50的記錄,但想知道記錄的總長度。我可以執行this.without $ group現在。 :) – jsgeek

+0

您可以使用$ limit來限制記錄的數量:https://docs.mongodb.com/manual/reference/operator/aggregation/limit/。如果你不想用$組來計算數字,你可以得到結果的長度 –

+0

,因爲我知道我將按照限制中的定義獲取數據。我可以得到50條記錄,但是如果總長度是19808,我也想獲得總記錄長度,那麼我只想獲取50條數據,並且總長度爲19808 – jsgeek