MongoDB 对数组中的元素进行分组
Posted
技术标签:
【中文标题】MongoDB 对数组中的元素进行分组【英文标题】:MongoDB group elements in an array 【发布时间】:2020-05-24 17:29:53 【问题描述】:对于每个 product_id,我想要所有订单中的价格总和以及我想要实现的另一个结果是同一数组中具有相同 id 的产品的价格总和。
\\orders collection:
order_id: 123,
customer_id: 1,
order_items: [product_id:1, price: 2, product: 4, price: 8, product_id:1, price: 2]
,
order_id: 124,
customer_id: 5,
order_items: [product_id:5, price: 7, product: 4, price: 8]
我想要的第一个结果:
product_id: 1, tot_price: 4,
product_id: 4, tot_price: 16,
product_id: 5, tot_price: 7
第二个结果:
order_id:123,
product_tot: [product_id:1, tot_price: 4, product: 4, tot_price: 8],
order_id:124,
product_tot: [product_id:5, tot_price: 7, product: 4, tot_price: 8,
【问题讨论】:
【参考方案1】:尝试以下查询:
对于第一个结果:
db.collection.aggregate([
$unwind:
path: "$order_items",
preserveNullAndEmptyArrays: true
,
$group:
_id: "$order_items.product_id",
tot_price:
$sum: "$order_items.price"
,
$project:
_id: 0,
product_id: "$_id",
tot_price: 1
])
MongoPlayGroundLink
第二个结果:
db.collection.aggregate([
$unwind:
path: "$order_items",
preserveNullAndEmptyArrays: true
,
$group:
_id:
order_id: "$order_id",
product_id: "$order_items.product_id"
,
tot_price:
$sum: "$order_items.price"
,
$project:
_id: 0,
order_id: "$_id.order_id",
product_id: "$_id.product_id",
tot_price: "$tot_price"
,
$group:
_id: "$order_id",
product_tot:
$push:
product_id: "$product_id",
tot_price: "$tot_price"
,
$project:
_id: 0,
order_id: "$_id",
product_tot: 1
])
MongoPlayGroundLink
【讨论】:
感谢您的回答,但它不起作用,它返回,在 0 毫秒内获取 0 条记录 您是否检查了 MongoPlayGroundLink 链接,它在 OP 中按要求工作... 是的,它有效!集合的名称不同。非常感谢!以上是关于MongoDB 对数组中的元素进行分组的主要内容,如果未能解决你的问题,请参考以下文章