我想在一些數據統計中使用mongo的聚合框架。我正在使用的查詢,當在本地運行時,幾乎不需要一分鐘,但是當我在服務器上運行相同的查詢它不給予迴應,並在繼續等待太久後,我不得不取消它,任何人都可以請建議爲什麼這發生。服務器上的Monogo聚合查詢花費太長時間
var orderIds = db.delivery.find({"status":"DELIVERED"}).map(function(o) {
return o.order
});
var userIds = db.order.aggregate([{
$match : { _id : { $in : orderIds } }
}, {
$group: { _id : "$customer" }
}]).map(function(u) { return u._id });
var userstats = db.order.aggregate([{
$sort : { customer : 1, dateCreated : 1 }
}, {
$match : { status : "DELIVERED", customer : { $in : userIds } }
}, {
$group: {
_id : "$customer", orders : { $sum : 1 },
firstOrderDate : { $first : "$dateCreated" },
lastOrderDate : { $last : "$dateCreated" }
}
}]);
userstats.forEach(function(x) {
db.user.update({ _id : x._id }, {
$set : {
totalOrders : x.orders,
firstOrderDate : x.firstOrderDate,
lastOrderDate : x.lastOrderDate
}
})
})
我不確定,但不應該在服務器上更快嗎? ,但相反,它無法提供輸出。
解決方案看起來不錯,我可以看到很多新東西,但查詢以某種方式拋出語法錯誤「Unexpected token}」 – user29578
@ user29578有一個錯字,我在更新後的答案中刪除了管線陣列之前的額外右大括號。再試一次。 – chridam
嗨chridam,我得到這個錯誤2016-02-14T02:32:33.615 + 0530 TypeError:對象函數(){ 返回新Bulk(this,false); }具有(殼)沒有方法 '查找' :1:436 在Object.DBQuery.forEach(SRC /蒙戈/殼/ query.js:281:9) 在(殼):1:409 – user29578