我有非常复杂的MongoDB 文档
例如:订单文档>gt>
{
"_id": "62cdbae0421b250009acc329",
"cartitems": "62cdbaaf74c9c80009f5a4b2",
},
{
"_id": "62d27e192b254600099ae680",
"cartitems": "62d27d9d91568c0009866d23",
}
以及购物车文档>gt>
{
"_id": "62cdbaaf74c9c80009f5a4b2",
"cartItems": [
{
"productCode": [
"NCK-1"
],
"Price": "56",
},
{
"productCode": [
"NCK-2"
],
"Price": "56",
}
],
},
{
"_id": "62d27d9d91568c0009866d23",
"cartItems": [
{
"productCode": [
"NCK-3"
],
"Price": "56",
},
{
"productCode": [
"NCK-1"
],
"Price": "56",
}
],
},
我想加入带有购物车的订单文档订单分区_id和groupby ProductCode和Count Product Code和Sum Price,即总的来说,结果必须看起来像
NCK-1 112
NCK-2 56NCK-3 56
我尝试了以下代码>gt>
Order.aggregate([
{
$lookup: {
from: Cart.collection.name,
localField: 'cartitems',
foreignField: '_id',
as: 'cartitems',
},
},
{ $unwind: '$cartitems' },
{
$group: {
_id: '$cartitems.cartItems.productCode',
count: { $sum: '$cartitems.cartItems.Price' },
},
},
]);
我找不到解决方案,请指导我解决这个问题。
-
$lookup
-
$unwind
-
$unwind
-将cartitems.cartItems
数组分解为多个文档。 -
$group
-由于cartitems.cartItems.productCode
中只有一个项,可以考虑使用$first
获取数组的第一个值。并且您需要在求和之前将cartitems.cartItems.Price
类型强制转换为number
类型。
db.order.aggregate([
{
$lookup: {
from: "cart",
localField: "cartitems",
foreignField: "_id",
as: "cartitems"
}
},
{
$unwind: "$cartitems"
},
{
$unwind: "$cartitems.cartItems"
},
{
$group: {
_id: {
$first: "$cartitems.cartItems.productCode"
},
count: {
$sum: {
$toInt: "$cartitems.cartItems.Price"
}
}
}
}
])
Mongo游乐场示例