【发布时间】:2019-02-11 04:25:17
【问题描述】:
我有以下物品:
用户
事件
票
购票
我正在尝试根据特定的Ticket.type 计算给定Event 的所有TicketPurchases 中的Tickets 的数量。
我正在使用以下代码来尝试实现这一目标:
ticket.js
const TicketSchema = new Schema({
type : {type: String},
total_quantity : {type: Number},
price : {type: String},
limit_per_order: {type: Number},
start_date: {type: Date},
end_date: {type: Date},
description: {type: String},
validated: {type: String, default: 'false'}
});
ticketPurchase.js
const TicketPurchaseSchema = new Schema({
user: {type: Schema.Types.ObjectId, ref: 'User'},
event: {type: Schema.Types.ObjectId, ref: 'Event'},
tickets: [{type: Schema.Types.ObjectId, ref: 'Ticket'}],
time_stamp: {type: Date}
});
count.js
var event_id = req.query.event_id;
var ticket_id = req.query.ticket_id;
Ticket.findOne({ _id: ticket_id }).exec(function(err, results) {
if (err) {
console.log(err);
}
console.log(results); //returns ticket successfully
TicketPurchase.aggregate(
[
{
$match: {
event: mongoose.Types.ObjectId(event_id)
}
},
{
$group: {
_id: null,
count: {
$sum: {
$size: {
$filter: {
input: "$tickets",
as: "el",
cond: {
$eq: ["$$el.type", results.type]
}
}
}
}
}
}
}
],
function(err, results) {
if (err) {
console.log(err);
} else {
console.log(results); //number of ticket purchases
}
}
);
});
但我不断得到以下结果:
Count 始终为 0,但是,我可以确认 TicketPurchase 中有门票。
另外,this post 建议避免使用 $unwind。
我还是 mongodb 的新手。提前致谢
工具:
Nodejs
猫鼬
mLab
【问题讨论】:
标签: node.js mongodb mongoose aggregation-framework