我正在使用聚合來查詢我的模式計數日期範圍,我的問題是我沒有從服務器得到任何響應(每次超時),其他貓鼬查詢工作正常(查找,保存等) ),當我調用聚合它取決於管道(當我只使用匹配我得到一個響應,當我添加放鬆我沒有得到任何)。聚合時序輸出
連接代碼:
var promise = mongoose.connect('mongodb://<username>:<password>@<db>.mlab.com:<port>/<db-name>', {
useMongoClient: true,
replset: {
ha: true, // Make sure the high availability checks are on
haInterval: 5000 // Run every 5 seconds
}
});
promise.then(function(db){
console.log('DB Connected');
}).catch(function(e){
console.log('DB Not Connected');
console.errors(e.message);
process.exit(1);
});
架構:
var ProspectSchema = new Schema({
contact_name: {
type: String,
required: true
},
company_name: {
type: String,
required: true
},
contact_info: {
type: Array,
required: true
},
description:{
type: String,
required: true
},
product:{
type: Schema.Types.ObjectId, ref: 'Product'
},
progression:{
type: String
},
creator:{
type: String
},
sales: {
type: Schema.Types.ObjectId,
ref: 'User'
},
technical_sales: {
type: Schema.Types.ObjectId,
ref: 'User'
},
actions: [{
type: {type: String},
description: {type: String},
date: {type: Date}
}],
sales_connect_id: {
type: String
},
date_created: {
type: Date,
default: Date.now
}
});
聚合代碼:
exports.getActionsIn = function(start_date, end_date) {
var start = new Date(start_date);
var end = new Date(end_date);
return Prospect.aggregate([
{
$match: {
// "actions": {
// $elemMatch: {
// "type": {
// "$exists": true
// }
// }
// }
"actions.date": {
$gte: start,
$lte: end
}
}
}
,{
$project: {
_id: 0,
actions: 1
}
}
,{
$unwind: "actions"
}
,{
$group: {
_id: "actions.date",
count: {
$sum: 1
}
}
}
// ,{
// $project: {
// _id: 0,
// date: {
// $dateToString: {
// format: "%d/%m/%Y",
// date: "actions.date"
// }
// }
// // ,
// // count : "$count"
// }
// }
]).exec();
}
調用聚合:
router.get('/test',function(req, res, next){
var start_date = req.query.start_date;
var end_date = req.query.end_date;
ProspectCont.getActionsIn(start_date,end_date).then(function(value, err){
if(err)console.log(err);
res.json(value);
});
})
我的主要問題是,我沒有得到任何答覆,我可以與一個錯誤消息的問題是我沒有得到任何,所以我不知道什麼是錯的。
貓鼬版本:4.11.8
P.我試圖聚合管道的多種變化,所以這不是我第一次嘗試,我有一個聚合工作的主要前景架構而不是動作子文檔
謝謝你的答案。我仍然有一個問題,當我在$ elematch階段的$匹配之後添加項目階段時,查詢超時,在我的給定集合中,$ match階段本身返回3個結果,因此我懷疑它是一個硬件問題(要查詢的總文檔是42(38.31kb))。我添加了索引,$匹配查詢幾乎是即時的。 –
@AhmedSaad您實際上沒有檢查錯誤。錯誤與承諾的工作方式不同。 'ProspectCont.getActionsIn(start_date,end_date).then(result => {/ * work with result * /})。catch(err =>/*使用err * /)'。所以你使用'.catch()'進行錯誤檢查。 Promises只通過'.then()'返回** one **參數,並且不使用'(err,result)'的「節點回調」風格,但分開錯誤。如果出現錯誤,您正在以不同的方式顯示它的顯示方式。這就是爲什麼我是如此明確,所以你可以完全按照一切。 –
因此,當鏈接承諾我應該使用底部的一個捕獲? –