我只想显示一张产品图片

Posted

技术标签:

【中文标题】我只想显示一张产品图片【英文标题】:I want to display only one product image 【发布时间】:2021-04-11 22:15:49 【问题描述】:

这是节点js中的代码

const result = await OrderDB.aggregate([
       $match:  _id: mongoose.Types.ObjectId(id)  ,
      
        $lookup: 
          from: 'products',
          localField: 'product',
          foreignField: '_id',
          as: 'productDetail',
        ,
      ,
      
        $project: 
         
          productDetail: 
            name: 1,
            price: 1,
            productImage: 1,
          ,
        ,
      ,
    ])

这是代码的响应


    "message": "Get Order Successfully",
    "result": [
        
            "_id": "5ff47348db5f5917f81871aa",
            "productDetail": [
                
                    "name": "Camera",
                    "productImage": [
                        
                            "_id": "5fe9b8a26720f728b814e246",
                            "img": "uploads\\product\\7Rq1v-app-7.jpg"
                        ,
                        
                            "_id": "5fe9b8a26720f728b814e247",
                            "img": "uploads\\product\\FRuVb-app-8.jpg"
                        
                    ],
                    "price": 550
                
            ]
        
    ]

我只想从使用 nodejs 和 mongoose 的响应中显示一个 productImage

这是在聚合投影中使用

我在使用 $arrayElemAt 但它不起作用

我也使用 $first 但它不起作用

所以我使用的投影方法只显示一个*productImage*

【问题讨论】:

这个答案对你有帮助吗? 【参考方案1】:

数据看起来像是多层嵌套的。

你有array of results, each result contains array of productDetails

play

您需要展开数据以获得第一个productImage

db.collection.aggregate([
  
    "$unwind": "$result"
  ,
  
    "$unwind": "$result.productDetail"
  ,
  
    $project: 
      pImage: 
        "$first": "$result.productDetail.productImage"
      
    
  
])

【讨论】:

【参考方案2】:

有了上面的回复

db.collection.aggregate([
  
    "$project": 
      productDetails: 
        $map: 
          input: "$productDetail",
          in: 
            "$mergeObjects": [
              "$$this",
              
                productImage: 
                  "$arrayElemAt": [
                    "$$this.productImage",
                    0
                  ]
                
              
            ]
          
        
      
    
  
])

工作Mongo playground

【讨论】:

以上是关于我只想显示一张产品图片的主要内容,如果未能解决你的问题,请参考以下文章

在 woocommerce 中获取产品图像、可用性和描述的代码

产品管理页中,如何只显示多个正常大小的详情图片的第一张

产品管理页中,如何只显示多个正常大小的详情图片的第一张

Woocommerce - 在产品标题上方显示产品类别

在 WooCommerce 产品循环中显示特定类别的产品属性值

在WooCommerce中取代可变产品定价