这是我使用的代码
getCartProducts:(userId)=>{
return new Promise(async(resolve,reject)=>{
let cartItems = await db.get().collection(collection.CART_COLLECTION).aggregate([
{
$match:{user:objectId(userId)}
},
{
$lookup:{
from:collection.PRODUCT_COLLECTION,
let:{prodList:'$products'},
pipeline:[
{
$match:{
$expr:{
$in:['$_id',"$$prodList"]
},
},
},
],
as:'cartItems'
}
}
]).toArray()
resolve(cartItems)
})
}
路由器代码:-
router.get('/cart',varifiedLogin,async(req,res)=>{
let products = await userHelpers.getCartProducts(req.session.user._id)
console.log(products);
res.render('user/cart')
})
我得到的输出:-
[
{
_id: 5fac03eed5f7b103a8906c03,
user: 5fa8f0dbd417a11f6db37544,
products: [
5fac03eed5f7b103a8906c02,
5fac06f454045e0403e470e0,
5fac268d2071f006ff398666
],
cartItems: []
}
]
这是预期的输出。我应该在购物车项目中获取对象。 _id 是产品 ID 具有用户 ID 的用户字段 该产品有 3 件商品,我已添加到购物车。 在购物车内,我需要将产品作为数组获取。
[
{
_id: 5fac03eed5f7b103a8906c03,
user: 5fa8f0dbd417a11f6db37544,
products: [
5fac03eed5f7b103a8906c02,
5fac06f454045e0403e470e0,
5fac268d2071f006ff398666
],
cartItems: [[Object],[Object]]
}
]
在
$in
中使用第二个参数的数组。 $in
恰好需要 2 个参数。
像这样-
$in: ['$_id', ["$$prodList"]]
解决(cartItems[0].cartItems)