У меня есть следующие объекты:
Пользователь
Событие
Билет
TicketPurchase
Я пытаюсь подсчитать число Tickets
во всех TicketPurchases
для данного Event
на основе определенного Ticket.type
.
Я использую следующий код для достижения этой цели:
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
}
}
);
});
Но я продолжаю получать следующий результат:
Счетчик всегда равен 0, однако я могу подтвердить, что в TicketPurchase есть Билеты.
Также в этом посте предлагает избегать использования $ unwind.
Я все еще новичок в mongodb. Заранее спасибо
Инструменты: