如问题所述,我无法使此更新操作正常工作。
我的设想:
我有一个事件
、一个票证
和一个票证采购
。事件
和TicketPurchase
具有Ticket
数组作为属性。
我需要达到的目标是:
>
将同一票据的total_quantity
属性从1递减。在主事件
表中。(
TicketPurchase
中的所有票证都是主事件
表中票证的副本)
作为程序员,我几乎所有的经验都花在了MySQL上,所以我仍然是NoSQL世界的初学者。
我所尝试的:
检查文档
票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'}
});
事件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}
});
购票。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}
});
使现代化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.';
}
}
首先,这里是一个简短的示例,说明了如何避免循环,并仅使用mongoose方法完成所有操作:
TicketPurchase.findById(purchaseId, (err, ticketPurchase) => {
Ticket.update({ _id: { $in: ticketPurchase.tickets }, _id: ticket_id, validated: 'false' },
{ $set: { validated: 'true' }, $inc: { total_quantity: -1 } },
(err, outcome) => {
console.log(`The number of validated tickets for the Purchase #${purchaseId} is ${outcome.nModified}`);
});
});
在这里,它在相同的操作中执行所有操作:找到属于购买且尚未验证的票证,然后将验证属性设置为true并递减数量。最后,您将获得修改记录的总数。
在您的示例中,我看不到您在purchaseTicket中填充了您的票证。要以您编写的方式迭代票证对象,您必须为它们的父实体填充它,因为属性ticketPurchase。票证
仅包含引用。表达式看起来像:TicketPurchase。findById(purchaseId)。填充('tickets')。然后(购买=
此外,您似乎不必在事件模式中更新票证,因为您可以直接在票证模式中进行更新(就像我在示例开销中所做的那样),因为所有引用最终都指向模式中的对象。
我想统计一下每分钟存储的新文档数量。 由于带有标准ObjectID的_id字段已经包含文档创建的时间戳,我认为应该可以以某种方式使用它。 在Stackoverflow上,我发现了以下映射缩减代码,以便在创建数据有专用字段时完成它 地图-减少每分钟的文档数MongoDB 根据Mongo DB文档(http://docs.mongodb.org/manual/reference/object-id/)
我有一份这样的文件: 我想通过将其与数量字段(2*800)相乘来更新价格字段,其中的结果将更新/分配给价格。(对于本例,价格更新为1600)。 更新后的文档: 我的选择查询如下: 我怎样才能做到这一点?
将mongodb与pymongo一起使用,我有以下文档: 我想更新示例子文档(这是一个数组元素,因为可能有多个示例)。我有以下代码,但它不工作... 谁能告诉我这个有什么问题吗?
主要内容:使用XML更新文档使用XML更新文档 以下是用于更新现有文档中的字段的XML文件。将下面的内容保存在名称为的文件中。 正如上面看到的,写入更新数据的XML文件就类似之前用来添加文档的文件。 但唯一的区别是这里使用字段的一个属性。 在这个示例中,我们将使用上述文档并尝试更新为文档的字段。 假设XML文档()存在于Solr的bin目录中。更新的核心是名称为的索引,可以使用工具更新如下 - 执行上述命令后,将得到以下输出
我需要更新Mongo DB中另一个文档内的数组中的一个文档
我对mongodb中的聚合概念相对陌生。在我的文档中,有一个数组。我尝试用$match,$unwind,$group来提取数组中有两个给定值的文档。我猜写上去没什么帮助..这是样品 文件: 从这些文档中,我需要提取一个具有“类:1”和“主题[”物理“,”英语“]的文档 所以,如果我正确地编写了查询(或聚合),我应该从上面提取第二个文档。 这是我所拥有的 好吧,上面的聚合没有给我任何反馈,所以我尝试