[英]Mongodb : add new field after $lookup aggregate
我想將isFavorite添加為真/假,如果用戶將該組合標記為最喜歡的。"isFavorite" : 0 表示用戶已經將該項目標記為最喜歡的。我的查詢是
db.getCollection('itemorders').aggregate([
{ "$match": {"customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"), 'isCart': 0}},
{ "$lookup": {
"from": "itemlistorders",
"let": { "cartId": { "$toObjectId" : "$_id" }},
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$cartId", "$$cartId"] }}},
],
"as": "itemOrdered"
} },
{$unwind: { path: "$itemOrdered", preserveNullAndEmptyArrays: true }},
{ "$lookup": {
"from": "favoritedrinks",
"let": { "uniqueCartKey": "$itemOrdered.uniqueCartKey" },
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$uniqueFavKey", "$$uniqueCartKey"] }}},
{ "$addFields": { "isFavorite": true }}
],
"as": "mixerList"
} },
{$unwind: { path: "$itemOrdered", preserveNullAndEmptyArrays: true }},
{
"$group": {
"_id": "$_id",
"grantTotal" : { "$first": "$grantTotal" },
"customerName" : { "$first": "$customerName" },
"barName" : { "$first": "$barName" },
"itemOrdered": { "$addToSet": "$itemOrdered" },
}
},{
$project: {
'_id': 1,
'grantTotal': 1,
'customerName': 1,
'barName': 1,
'itemOrdered': 1,
}
},
]);
排除此之后我的輸出是:
{
"_id" : ObjectId("5e8224768910e83e908d0108"),
"itemOrdered" : [
{
"_id" : ObjectId("5e82257250c82e1abc16d856"),
"barId" : ObjectId("5e55f60eff2f842de4ae6184"),
"customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"),
"isCart" : 0,
"isAlcoholActive" : 1,
"alcoholId" : "5e81d13e50c82e1abc0a1ebb",
"alcoholName" : "Irish Coffee",
"cartId" : ObjectId("5e8224768910e83e908d0108"),
"itemTotal" : 250,
"noofDrinks" : 2
},
{
"_id" : ObjectId("5e8224e88910e83e908d0110"),
"isCart" : 0,
"isAlcoholActive" : 1,
"isFavorite" : 0,
"customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"),
"barId" : ObjectId("5e55f60eff2f842de4ae6184"),
"noofDrinks" : 1,
"itemTotal" : 200,
"mixerList" : [
{
"isMixerActive" : 0,
"_id" : ObjectId("5e8224e88910e83e908d0111"),
"mixerId" : "5e820b0250c82e1abc12cffc",
"mixerName" : "Pineapple juice"
}
],
"alcoholId" : "5e81d17150c82e1abc0a2607",
"alcoholName" : "Fireball",
"cartId" : ObjectId("5e8224768910e83e908d0108"),
}
]
};
我想在每個子文檔中添加isFavorite ,以便我可以確定用戶是否喜歡這個項目。
下面的查詢適用於我的場景。
db.getCollection('itemorders').aggregate([
{ "$match": {"customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"), 'isCart': 0}},
{ "$lookup": {
"from": "itemlistorders",
"let": { "cartId": { "$toObjectId" : "$_id" }},
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$cartId", "$$cartId"] }}},
],
"as": "itemOrdered"
} },
{$unwind: { path: "$itemOrdered", preserveNullAndEmptyArrays: true }},
{ "$lookup": {
"from": "favoritedrinks",
"let": { "uniqueCartKey": "$itemOrdered.uniqueCartKey","customerId1": "$itemOrdered.customerId", "modifierfavId": "$itemOrdered._id" },
pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$uniqueFavKey", "$$uniqueCartKey"
]
},
{
$eq: [
"$customerId",
"$$customerId1"
]
}
]
}
}
},{ "$addFields": { "isFavorite": 'true' }}
],
"as": "itemListOrdered"
} },
{ "$addFields": { "itemOrdered.isFavorite": { "$gt": ["$itemOrdered.isFavorite", null] } }},
{
"$group": {
"_id": "$_id",
"grantTotal" : { "$first": "$grantTotal" },
"customerName" : { "$first": "$customerName" },
"barName" : { "$first": "$barName" },
"orderDate" : { "$first": "$orderDate" },
"itemOrdered": { "$push": "$itemOrdered" },
}
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.