Bạn có thể thử tổng hợp bên dưới
Về cơ bản, bạn cần phải $ filter
các sản phẩm
và kiểm tra mã $ cond >
ition nếu nó không chứa bất kỳ phần tử nào hoặc bằng []
thì bạn phải $ slice
với phần tử đầu tiên của sản phẩm
mảng.
db.collection.aggregate([
{ "$addFields": {
"products": {
"$cond": [
{
"$eq": [
{ "$filter": {
"input": "$products",
"cond": { "$eq": ["$$this.product_id", 2] }
}},
[]
]
},
{ "$slice": ["$products", 1] },
{ "$filter": {
"input": "$products",
"cond": { "$eq": ["$$this.product_id", 2] }
}}
]
}
}}
])
hoặc thậm chí sử dụng $ let
tổng hợp
db.collection.aggregate([
{ "$addFields": {
"products": {
"$let": {
"vars": {
"filt": {
"$filter": {
"input": "$products",
"cond": { "$eq": ["$$this.product_id", 2] }
}
}
},
"in": {
"$cond": [
{ "$eq": ["$$filt", []] },
{ "$slice": ["$products", 1] },
"$$filt"
]
}
}
}
}}
])