最近项目中需要修复 mongo 中的数据,需要更新数组中对象的某一个属性,于是学会了一个 mongo 语句,记录下
先造几条数据
db.order.insertMany([
{
orderNo: "2024010500001",
menuList: [{
foodId: "00001",
foodName: "菜品1",
foodOriginPrice: NumberDecimal("20"),
foodPrice: NumberDecimal("22"),
foodNum: NumberInt("1")
}, {
foodId: "00002",
foodName: "菜品2",
foodOriginPrice: NumberDecimal("30"),
foodPrice: NumberDecimal("33"),
foodNum: NumberInt("1")
}]
},
{
orderNo: "2024010500002",
menuList: [{
foodId: "00001",
foodName: "菜品1",
foodOriginPrice: NumberDecimal("20"),
foodPrice: NumberDecimal("22"),
foodNum: NumberInt("2")
}, {
foodId: "00002",
foodName: "菜品2",
foodOriginPrice: NumberDecimal("30"),
foodPrice: NumberDecimal("33"),
foodNum: NumberInt("2")
}]
},
{
orderNo: "2024010500003",
menuList: [{
foodId: "00001",
foodName: "菜品1",
foodOriginPrice: NumberDecimal("20"),
foodPrice: NumberDecimal("22"),
foodNum: NumberInt("3")
}, {
foodId: "00002",
foodName: "菜品2",
foodOriginPrice: NumberDecimal("30"),
foodPrice: NumberDecimal("33"),
foodNum: NumberInt("3")
}]
},
{
orderNo: "2024010500004",
menuList: [{
foodId: "00001",
foodName: "菜品1",
foodOriginPrice: NumberDecimal("20"),
foodPrice: NumberDecimal("22"),
foodNum: NumberInt("4")
}, {
foodId: "00002",
foodName: "菜品2",
foodOriginPrice: NumberDecimal("30"),
foodPrice: NumberDecimal("33"),
foodNum: NumberInt("4")
}]
},
{
orderNo: "2024010500005",
menuList: [{
foodId: "00001",
foodName: "菜品1",
foodOriginPrice: NumberDecimal("20"),
foodPrice: NumberDecimal("22"),
foodNum: NumberInt("5")
}, {
foodId: "00002",
foodName: "菜品2",
foodOriginPrice: NumberDecimal("30"),
foodPrice: NumberDecimal("33"),
foodNum: NumberInt("5")
}]
}
]);
现在我需要把订单号是 2024010500003 的订单里的两条菜品里的 foodNum 改成1
db.order.updateMany(
{
orderNo: '2024010500003'
},
{
$set: {
"menuList.$[].foodNum": NumberInt("1")
}
}
)
$[] 是 MongoDB 的一个更新操作符,用于对数组中的所有元素进行更新。它可以在更新操作符(如 set、set、set、unset、$inc 等)中使用,并且可以将更新操作应用到数组中的所有元素上。