MongoDB操作代码
// 获取当前日期
const currentDate = new Date();
// 计算一个月前的日期
const oneMonthAgo = new Date(currentDate.getTime() - 30 * 24 * 60 * 60 * 1000);
db.orders.updateMany(
{
order_date: { $gte: oneMonthAgo },
"products.price": { $gt: 100 }
},
[
{
$set: {
total_amount: { $multiply: ["$total_amount", 1.1] },
discount_applied: true
}
}
]
);
大数据量下性能优化分析
- 索引优化:
- 为
order_date
字段创建升序索引,可加快对订单日期范围的筛选。
db.orders.createIndex({order_date: 1});
- 为
products.price
字段创建复合索引,由于查询条件涉及到数组内元素的字段,复合索引可以提高查询效率。例如,如果经常结合customer_id
一起查询,可以创建复合索引:
db.orders.createIndex({customer_id: 1, "products.price": 1});
- 批量处理:在大数据量场景下,不要一次性处理全部数据,可以按批次进行更新操作。例如,每次处理1000条数据,通过设置
batchSize
来控制。
- 使用聚合管道优化:在更新操作中,尽量使用聚合管道(如代码中所示),因为它提供了更强大和高效的数据处理能力。与传统的
update
操作相比,聚合管道可以更有效地处理复杂的更新逻辑。
- 硬件和集群优化:
- 确保服务器有足够的内存,以便MongoDB可以将更多的数据缓存到内存中,减少磁盘I/O。
- 考虑使用MongoDB集群(如副本集和分片集群)来提高读写性能和数据可用性。对于大型电商数据库,分片可以将数据分布在多个节点上,从而提高查询和更新的效率。