【发布时间】:2019-03-23 10:38:10
【问题描述】:
正如问题所述,我无法让此更新操作正常工作。
我的场景:
我有一个Event、一个Ticket 和一个TicketPurchase。 Event 和 TicketPurchase 具有 Ticket 数组作为属性。
我需要达到的目标:
将
TicketPurchase的票证数组中特定Ticket的validated属性从真/假更新。从主表
Event中的1. 减少同一票证的total_quantity属性。(TicketPurchase中的所有票证都是主表Event中票证的副本)
作为一名程序员,我几乎所有的经验都花在了使用 MySQL 上,所以我仍然是 NoSQL 世界的初学者。
我尝试过的:
- Checked the docs
- 在 S/O 上花了一些时间,this 被证明是最相关的答案,但我无法让这个解决方案发挥作用。
- 交换了我对
id和_id的用法,将$set之类的运算符放入和取出' ' 标记,以及所有其他类似的配置,什么都不会。
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'}
});
event.js
const EventSchema = new Schema({
title: {type: String},
location: {type: String},
start_date: {type: Date},
start_time: {type: String},
end_date: {type: Date},
end_time: {type: String},
description: {type: String},
organizer_name: {type: String},
organizer_about: {type: String},
cover_picture: {type: String},
tickets: [{type: Schema.Types.ObjectId, ref: 'Ticket'}],
access_code: {type: String, default: shortid.generate}
});
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}
});
update.js
for(var x of ticketPurchase.tickets){
//console.log(x);
if(x.id === ticket_id && x.validated === 'false'){
console.log('ticket not validated. Update');
TicketPurchase.update(
{_id: ticket_purchase_id, 'tickets._id': ticket_id},
{'$set':{
'tickets.$.validated': 'true'
}},
function (err){
console.log('updated validated');
if(err){console.log(err);}
}
);
Event
.update({_id: event_id, "tickets._id": x.id},
{$inc : {"tickets.$.total_quantity" : -1}});
console.log('updated ticket.total_qty');
payload['success'] = 'true';
}else if(x.id === ticket_id && x.validated === 'true'){
console.log('ticket validated');
payload['success'] = 'false';
payload['message'] = 'Ticket already validated.';
}
}
【问题讨论】:
标签: javascript node.js mongoose