MongoDB 如何形成查询以获得最畅销产品的排名
MongoDB how to form a query to get top selling products ranked
我的 mongodb 数据库中有订单模式,我想获得从最高到最低排名的最畅销产品,这是文档的样子:
所以,可以看出有一个shopping_cart是一个产品数组,可以通过[=30=来区分] 他们每个人都有数量(价格无关)。我试过形成这个查询:
db.orders.aggregate([
{
$project : {
"_id" : 0,
"shopping_cart.product_name" : 1,
"shopping_cart.qty" : 1,
}
}
])
结果我得到了这个:
{ shopping_cart:
[
{ product_name: 'Seven Days', qty: 2 },
{ product_name: 'Cockta 0.33l', qty: 3 },
{ product_name: 'Marbo Chips', qty: 3 },
{ product_name: 'Coca Cola 2l', qty: 1 }
]}
{ shopping_cart:
[
{ product_name: 'Seven Days', qty: 2 },
{ product_name: 'Coca Cola 2l', qty: 1 }
]}
{ shopping_cart:
[
{ product_name: 'Integral Cookie', qty: 4 },
{ product_name: 'Seven Days', qty: 2 },
{ product_name: 'Marbo Chips', qty: 1 },
{ product_name: 'Coca Cola 2l', qty: 4 }
]}
我想得到这样的输出(我在这里编造数据):
{ top_selling_products : [
'Integral Cookie','Coca Cola 2l','Marbo Chips''Seven Days'
]}
$unwind
放松shopping_cart
$group
按 product_name 分组并求和数量
$sort
按总和排序
$group
将所有分组并将名称推入数组
汇总
db.collection.aggregate([
{
"$unwind": "$shopping_cart"
},
{
"$group": {
"_id": "$shopping_cart.product_name",
"sum": {
"$sum": "$shopping_cart.qty"
}
}
},
{
"$sort": {
sum: -1
}
},
{
"$group": {
"_id": null,
"top_selling_products ": {
$push: "$_id"
}
}
}
])
数据
[
{
shopping_cart: [
{
product_name: "Seven Days",
qty: 2
},
{
product_name: "Cockta 0.33l",
qty: 3
},
{
product_name: "Marbo Chips",
qty: 3
},
{
product_name: "Coca Cola 2l",
qty: 1
}
]
},
{
shopping_cart: [
{
product_name: "Seven Days",
qty: 2
},
{
product_name: "Coca Cola 2l",
qty: 1
}
]
},
{
shopping_cart: [
{
product_name: "Integral Cookie",
qty: 4
},
{
product_name: "Seven Days",
qty: 2
},
{
product_name: "Marbo Chips",
qty: 1
},
{
product_name: "Coca Cola 2l",
qty: 4
}
]
}
]
结果
[
{
"_id": null,
"top_selling_products ": [
"Seven Days",
"Coca Cola 2l",
"Integral Cookie",
"Marbo Chips",
"Cockta 0.33l"
]
}
]
我的 mongodb 数据库中有订单模式,我想获得从最高到最低排名的最畅销产品,这是文档的样子:
所以,可以看出有一个shopping_cart是一个产品数组,可以通过[=30=来区分] 他们每个人都有数量(价格无关)。我试过形成这个查询:
db.orders.aggregate([
{
$project : {
"_id" : 0,
"shopping_cart.product_name" : 1,
"shopping_cart.qty" : 1,
}
}
])
结果我得到了这个:
{ shopping_cart:
[
{ product_name: 'Seven Days', qty: 2 },
{ product_name: 'Cockta 0.33l', qty: 3 },
{ product_name: 'Marbo Chips', qty: 3 },
{ product_name: 'Coca Cola 2l', qty: 1 }
]}
{ shopping_cart:
[
{ product_name: 'Seven Days', qty: 2 },
{ product_name: 'Coca Cola 2l', qty: 1 }
]}
{ shopping_cart:
[
{ product_name: 'Integral Cookie', qty: 4 },
{ product_name: 'Seven Days', qty: 2 },
{ product_name: 'Marbo Chips', qty: 1 },
{ product_name: 'Coca Cola 2l', qty: 4 }
]}
我想得到这样的输出(我在这里编造数据):
{ top_selling_products : [
'Integral Cookie','Coca Cola 2l','Marbo Chips''Seven Days'
]}
$unwind
放松shopping_cart$group
按 product_name 分组并求和数量$sort
按总和排序$group
将所有分组并将名称推入数组
汇总
db.collection.aggregate([
{
"$unwind": "$shopping_cart"
},
{
"$group": {
"_id": "$shopping_cart.product_name",
"sum": {
"$sum": "$shopping_cart.qty"
}
}
},
{
"$sort": {
sum: -1
}
},
{
"$group": {
"_id": null,
"top_selling_products ": {
$push: "$_id"
}
}
}
])
数据
[
{
shopping_cart: [
{
product_name: "Seven Days",
qty: 2
},
{
product_name: "Cockta 0.33l",
qty: 3
},
{
product_name: "Marbo Chips",
qty: 3
},
{
product_name: "Coca Cola 2l",
qty: 1
}
]
},
{
shopping_cart: [
{
product_name: "Seven Days",
qty: 2
},
{
product_name: "Coca Cola 2l",
qty: 1
}
]
},
{
shopping_cart: [
{
product_name: "Integral Cookie",
qty: 4
},
{
product_name: "Seven Days",
qty: 2
},
{
product_name: "Marbo Chips",
qty: 1
},
{
product_name: "Coca Cola 2l",
qty: 4
}
]
}
]
结果
[
{
"_id": null,
"top_selling_products ": [
"Seven Days",
"Coca Cola 2l",
"Integral Cookie",
"Marbo Chips",
"Cockta 0.33l"
]
}
]