mongodb 有条件更新
mongodb update with conditions
我的订单集合为
[
{
_id:'134',
items:[
{
_id:'itemId1'
quantity: 2,
price: 100,,
couponsApplied:[]
},
{
_id:'itemId2'
quantity: 2,
price: 200,,
couponsApplied:[]
}
]
}
]
我想为以上每件商品申请 5% 的折扣。即开
item _id:'itemId1'
, 我要推送 我要推送到优惠券应用为
{
couponAmount: 10, // quantity*price*percentage/100. which is 2*100*5/100
}
& 同样在_id:'itemId2', 我想推送优惠券应用为
{
couponAmount: 20,
}
所以,在更新操作之后它应该看起来像
[
{
_id:'134',
items:[
{
_id:'itemId1'
quantity: 2,
price: 100,,
couponsApplied:[
{
_id:'100',
couponAmount: 10
}
]
},
{
_id:'itemId2'
quantity: 2,
price: 200,,
couponsApplied:[
{
_id:'1002'
couponAmount: 20,
}
]
}
]
}
]
我已经尝试使用 $mul 和 $sum 进行聚合更新,但没有成功
请帮忙!
有点长的更新查询。
$set
- 更新 items
数组字段。
1.1。 $map
- 使用 items
数组和 returns 数组进行迭代。
1.1.1。 $mergeObjects
- 将当前对象与 couponsApplied
数组字段合并。
1.1.1.1。 $concatArrays
- 将 couponsApplied
数组与 1.1.1.1.1.
的结果合并
1.1.1.1.1。包含新文档的数组包含 couponAmount
字段。
db.collection.update({},
[
{
$set: {
"items": {
$map: {
input: "$items",
in: {
$mergeObjects: [
"$$this",
{
couponsApplied: {
$concatArrays: [
"$$this.couponsApplied",
[
{
couponAmount: {
$multiply: [
"$$this.price",
"$$this.quantity",
{
$divide: [
5,
100
]
}
]
}
}
]
]
}
}
]
}
}
}
}
}
])
试试这个:
db.collection.update({},
[
{
"$set": {
"items": {
$map: {
input: "$items",
as: "item",
in: {
_id: "$$item._id",
quantity: "$$item.quantity",
price: "$$item.price",
couponsApplied: {
$concatArrays: [
"$$item.couponsApplied",
[
{
couponAmount: {
$divide: [
{
$multiply: [
"$$item.quantity",
"$$item.price",
5
]
},
100
]
}
}
]
]
}
}
}
}
}
}
])
我的订单集合为
[
{
_id:'134',
items:[
{
_id:'itemId1'
quantity: 2,
price: 100,,
couponsApplied:[]
},
{
_id:'itemId2'
quantity: 2,
price: 200,,
couponsApplied:[]
}
]
}
]
我想为以上每件商品申请 5% 的折扣。即开
item _id:'itemId1'
, 我要推送 我要推送到优惠券应用为
{
couponAmount: 10, // quantity*price*percentage/100. which is 2*100*5/100
}
& 同样在_id:'itemId2', 我想推送优惠券应用为
{
couponAmount: 20,
}
所以,在更新操作之后它应该看起来像
[
{
_id:'134',
items:[
{
_id:'itemId1'
quantity: 2,
price: 100,,
couponsApplied:[
{
_id:'100',
couponAmount: 10
}
]
},
{
_id:'itemId2'
quantity: 2,
price: 200,,
couponsApplied:[
{
_id:'1002'
couponAmount: 20,
}
]
}
]
}
]
我已经尝试使用 $mul 和 $sum 进行聚合更新,但没有成功 请帮忙!
有点长的更新查询。
$set
- 更新items
数组字段。1.1。
$map
- 使用items
数组和 returns 数组进行迭代。1.1.1。
$mergeObjects
- 将当前对象与couponsApplied
数组字段合并。1.1.1.1。
的结果合并$concatArrays
- 将couponsApplied
数组与 1.1.1.1.1.1.1.1.1.1。包含新文档的数组包含
couponAmount
字段。
db.collection.update({},
[
{
$set: {
"items": {
$map: {
input: "$items",
in: {
$mergeObjects: [
"$$this",
{
couponsApplied: {
$concatArrays: [
"$$this.couponsApplied",
[
{
couponAmount: {
$multiply: [
"$$this.price",
"$$this.quantity",
{
$divide: [
5,
100
]
}
]
}
}
]
]
}
}
]
}
}
}
}
}
])
试试这个:
db.collection.update({},
[
{
"$set": {
"items": {
$map: {
input: "$items",
as: "item",
in: {
_id: "$$item._id",
quantity: "$$item.quantity",
price: "$$item.price",
couponsApplied: {
$concatArrays: [
"$$item.couponsApplied",
[
{
couponAmount: {
$divide: [
{
$multiply: [
"$$item.quantity",
"$$item.price",
5
]
},
100
]
}
}
]
]
}
}
}
}
}
}
])