如何解决如何使用$ unwind迭代精确值
我是猫鼬和mongodb的新手。
在我的addtocart
模式中,我添加了$lookups
和投影以填充添加到购物车中的产品。
在当前响应 product_purchase_quantity
中,它在添加到购物车集合中的数组中,是键和值。因此,在$lookups
中,我尝试添加{$unwind: '$product_purchase_quantity'}
,但是在添加add_to_cart_products
之后,对象打印两次。我不知道错误在哪里?
下面我提到了预期的结果。
AddToCart架构:
lookups: [
{
from: 'shop_db_products',let: {
productId: '$add_to_cart_products.product',purchaseQuantity: '$add_to_cart_products.product_quantity',productItemId: '$add_to_cart_products.product_item',},pipeline: [
{
$match: { $expr: { $in: ['$_id','$$productId'] } },{
$lookup: {
from: 'shop_db_products',localField: 'product_id',foreignField: '_id',as: 'products',{
$project: {
_id: true,product: {
_id: '$_id',product_name: '$product_name',product_purchase_quantity: '$$purchaseQuantity',product_item: {
$reduce: {
input: {
$filter: {
input: '$product_items',cond: {
$in: ['$$this._id','$$productItemId'],initialValue: {},in: {
_id: '$$this._id',product_size: { $concat: [{ $toString: '$$this.product_size.value' },'$$this.product_size.unit'] },product_price: '$$this.product_price',product_type: '$$this.product_type'
},],localField: '',as: 'add_to_cart_products',model: 'ProductModel',
AddToCart收藏
[
{
"add_to_cart_user": "5f0076b7bd530928fc0c0285","add_to_cart_products": [
{
"product": "5f05a0270b4f3a5c41c70826","product_item": "5f05a0270b4f3a5c41c70877","product_quantity": 5
},{
"product": "5f05a0270b4f3a5c41c70827","product_item": "5f05a0270b4f3a5c41c70666","product_quantity": 3
}
],"add_to_cart_product_total": 5,"add_to_cart_discount": 50,"add_to_tax": "5eae321d21924800122f978e","add_to_cart_grand_total": 500
}
]
当前响应:
{
"_id": "5fa2a09b3c6316482098f6ff","add_to_cart_status_is_active": true,"add_to_cart_tax": 8,"add_to_cart_products": [
{
"product": {
"_id": "5f05a0270b4f3a5c41c70826","product_name": "Avery Apricot Sour"
},"product_purchase_quantity": [
5,3
],"product_item": {
"_id": "5f05a0270b4f3a5c41c70877","product_size": "22oz","product_price": 13.99
}
},{
"product": {
"_id": "5f05a0270b4f3a5c41c70827","product_name": "Avery Dugana"
},"product_item": {
"_id": "5f05a0270b4f3a5c41c70666","product_price": 8.99
}
}
]
}
预期的响应:
{
"_id": "5fa2a09b3c6316482098f6ff","add_to_cart_products": [
{
"product": {
"_id": "5f05a0270b4f3a5c41c70826","product_purchase_quantity": 5,{
"product": {
"_id": "5f05a0270b4f3a5c41c70827","product_purchase_quantity": 3,"product_price": 8.99
}
}
]
}
产品(shop_db_products)集合:
[
{
"_id": "5f05a0270b4f3a5c41c70826","product_no": "PRO04087","product_store_no": "1001","product_dept_no": "Irish Whiskey","product_name": "2Gingers","product_overview": "No Overview","product_items": [
{
"_id": "5f05a0270b4f3a5c41c70877","product_item_number": "857566003019","product_price": 20.99,"product_cost": 20.99,"product_size": "750ml","product_type": "Bottle","product_value": 0,"product_quantity": 0,"product_images": [
"pro04087-857566003019-1.png"
],"product_item_is_active": true
}
]
},...
]
解决方法
在执行$ lookup之前,您必须先$ add_to_cart_products
放开
db.addToCart.aggregate([
{
$unwind: "$add_to_cart_products"
},{
$lookup: {
from: "shop_db_products",let: {
productId: "$add_to_cart_products.product",purchaseQuantity: "$add_to_cart_products.product_quantity",productItemId: "$add_to_cart_products.product_item"
},pipeline: [
{
$match: {
$expr: {
$eq: [
"$_id","$$productId"
]
}
}
},{
$project: {
_id: true,product: {
_id: "$_id",product_name: "$product_name",},product_purchase_quantity: "$$purchaseQuantity",product_item: {
$reduce: {
input: {
$filter: {
input: "$product_items",cond: {
$eq: [
"$$this._id","$$productItemId"
],initialValue: {},in: {
_id: "$$this._id",product_size: "$$this.product_size",product_price: "$$this.product_price",product_type: "$$this.product_type"
}
}
}
}
}
],as: "add_to_cart_products"
}
},{
$unwind: "$add_to_cart_products"
},{
$group: {
_id: "$_id","add_to_cart_products": {
$push: "$add_to_cart_products"
}
}
}
])
,
另一种方式 没有减速器,带有$ unwind
https://mongoplayground.net/p/3uWA5pVBv83
db.addToCart.aggregate([
{
"$unwind": "$add_to_cart_products"
},{
"$lookup": {
"from": "shop_db_products","let": {
"productId": "$add_to_cart_products.product","purchaseQuantity": "$add_to_cart_products.product_quantity","productItemId": "$add_to_cart_products.product_item"
},"pipeline": [
{
"$match": {
"$expr": {
"$eq": [
"$_id",{
"$unwind": "$product_items"
},{
"$match": {
"$expr": {
"$eq": [
"$product_items._id","$$productItemId"
]
}
}
},{
"$project": {
"_id": true,"product": {
"_id": "$_id","product_name": "$product_name"
},"product_purchase_quantity": "$$purchaseQuantity","product_item": "$product_items"
}
}
],"as": "productResolved"
}
},{
"$unwind": "$productResolved"
},{
"$group": {
"_id": "$_id","add_to_cart_products": {
"$push": "$productResolved"
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。