我只想显示一张产品图片
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 中获取产品图像、可用性和描述的代码