我被困在某事上需要你的帮助。
我想对下面的集合执行一个mongo聚合查询,这样我就可以从boxWeight1和boxWeight2得到每个子阵列表的最大总重量,即sum+=max[boxWeight1,boxWeight2] for each array item in boxList array
和其他字段应该按原样投影但是使用不同的密钥名称。
收藏有点像这样......
{
_id: '',
email: 'yugal121@gmail.com',
number: 12345,
boxDetail: {
boxname: 'package_yugal',
boxList: [
{
boxWeight1: '4.0', //this is max here. so it will be added
boxWeight2: '2.0'
}.
{
boxWeight1: '4.0',
boxWeight2: '8.0' //this is max here. so it will be added
}
{
boxWeight1: '0.0',
boxWeight2: '2.0' //this is max here. so it will be added
}
]
}
}
因此,执行查询后上述集合的结果应该是这样的:
{
'User Mail': 'yugal121@gmail.com',
'Order Number': '12345',
'Total Weight': '14.0' // 4 + 8 + 2
}
我希望你理解我的问题。 提前谢谢。
答案 0 :(得分:0)
您可以尝试以下查询:
db.collection.aggregate([
{
$unwind : "$boxList"
},
{
$project : {
"email" : 1,
"number" : 1,
"maxWeight" : { $cond : { if : { $gt :
["$boxList.boxWeight1","$boxList.boxWeight2"]} ,
then : "$boxList.boxWeight1" ,
else : "$boxList.boxWeight2"}
}
}
},
{
$group : {
_id : "$_id" ,
Total : { $sum : "$maxWeight" },
email : { $first : "$email" },
number : {$first : "$number"}
}
},
{
$project : {
"User Mail" : "$email" ,
"Order Number" : "$number",
"Total Weight" : "$Total",
_id : 0
}
}
]);
答案 1 :(得分:0)
这很有用......
<form method="post" action='<?php echo htmlentities($_SERVER["PHP_SELF"]);?>'>
这会给出带有_id列的结果。可以在其后使用另一个投影删除。