gpt4 book ai didi

MongoDb 运算符不适用于对象属性数组

转载 作者:行者123 更新时间:2023-12-05 05:50:47 25 4
gpt4 key购买 nike

我遇到了 MongoDB 查询的问题。我们的集合名为 products,数据放置如下。

    {
"_id":"61b823681975ba537915cb0c",
"salesInfo":{
"_id":"61b823681975ba537915c23c",
"salesDate":[
{
"_id":"61b3aa4a7b04b30cd0a76b06",
"salesQuantity":100,
"soldPieces":36,
"holdPieces":0
},
{
"_id":"61b3aa4a7b04b30cd0a75506",
"salesQuantity":100,
"soldPieces":36,
"holdPieces":0
}
]
}
}

我想在对象数组中添加一个名为percentageSold 的新字段,其值应该是以下公式的计算((soldPieces + holdPieces)/salesQuantity * 100).

我的查询是这样的,但它为 percentageSold 属性返回 null

    db.products.aggregate( [
{
$addFields: {
"salesInfo.salesDate.percentageSold": {$divide: [{$add: ["$salesDate.soldPieces", "$salesDate.holdPieces"]}, {$multiply: ["$salesDate.salesQuantity", 100]}]}
}
}
])

最佳答案

由于salesInfo.salesDate是一个数组字段,您需要使用$map这样的数组运算符来进行逐元素运算。

db.products.aggregate([
{
$addFields: {
"salesInfo.salesDate": {
"$map": {
"input": "$salesInfo.salesDate",
"as": "s",
"in": {
"_id": "$$s._id",
"salesQuantity": "$$s.salesQuantity",
"soldPieces": "$$s.soldPieces",
"holdPieces": "$$s.holdPieces",
"percentageSold": {
$divide: [
{
$add: [
"$$s.soldPieces",
"$$s.holdPieces"
]
},
{
$multiply: [
"$$s.salesQuantity",
100
]
}
]
}
}
}
}
}
}
])

这是 Mongo playground供大家引用。

关于MongoDb 运算符不适用于对象属性数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70463898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com