使用数学运算聚合 MongoDB
Aggregation using mathematical operations MongoDB
下午好,您如何查询:商品的每个价格 ("Precios") 10% 的折扣。
我正在尝试使用查询:
db.tienda.aggregate( [
{
$project: {
"Productos.Nombre": 1,
"Productos.Precio": 1,
"Descuento": {
$sum: [
"$Productos.Precio",
{
$multiply: [
"$Productos.Precio",
-0.10
]
}
]
}
}
}
] )
我的文档结构是:
db.tienda.insert( [
{
"Codigo": 1, "Nombre": "Fabrica comida",
"Productos": [ { "Codigo": "C1", "Nombre": "Papitas", "Precio": 1.20 }, {
"Codigo": "C2", "Nombre": "Perro caliente", "Precio": 3.10 }, { "Codigo":
"C3", "Nombre": "Hamburguesa", "Precio": 4 }, { "Codigo": "C4", "Nombre":
"Pizza", "Precio": 2.60 }, { "Codigo": "C5", "Nombre": "Malteada",
"Precio": 3 } ]
},
{
"Codigo": 2, "Nombre": "Tecnologia",
"Productos": [ { "Codigo": "T1", "Nombre": "Producto 8", "Precio": 300 }, {
"Codigo": "T2", "Nombre": "Smart TV", "Precio": 1200 }, { "Codigo": "T3",
"Nombre": "Teatro en casa", "Precio": 250 }, { "Codigo": "T4", "Nombre":
"Laptop", "Precio": 560 }, { "Codigo": "T5", "Nombre": "DVD", "Precio": 160
} ]
},
{
"Codigo": 3, "Nombre": "Deportes",
"Productos": [ { "Codigo": "D1", "Nombre": "Balon de futbol", "Precio": 20
}, { "Codigo": "D2", "Nombre": "Bate de baseball", "Precio": 49.99 }, {
"Codigo": "D3", "Nombre": "Canilleras", "Precio": 7.80 }, { "Codigo": "D4",
"Nombre": "Equipo de buceo", "Precio": 650 }, { "Codigo": "D5", "Nombre":
"Raqueta de tenis", "Precio": 25.50 } ]
},
{
"Codigo": 4, "Nombre": "Muebles",
"Productos": [ { "Codigo": "M1", "Nombre": "Armario", "Precio": 330 }, {
"Codigo": "M2", "Nombre": "Mesa de centro", "Precio": 60 }, { "Codigo":
"M3", "Nombre": "Comedor", "Precio": 1090 }, { "Codigo": "M4", "Nombre":
"Sala-Comedor", "Precio": 860 }, { "Codigo": "M5", "Nombre": "Lampara",
"Precio": 40 } ]
},
{
"Codigo": 5, "Nombre": "Hobbies",
"Productos": [ { "Codigo": "H1", "Nombre": "Mesa de hockey", "Precio": 320
}, { "Codigo": "H2", "Nombre": "Mesa de ping-pong", "Precio": 610 }, {
"Codigo": "H3", "Nombre": "Mesa de billar", "Precio": 2400 }, { "Codigo":
"H4", "Nombre": "Consola de videojuegos", "Precio": 220 }, { "Codigo":
"H5", "Nombre": "Mesa de poker", "Precio": 1650 } ]
}
] )
知道执行查询的方式是什么吗?
提前致谢
试试这个聚合来计算所有产品的 10% 折扣
db.tienda.aggregate([
{
$project: {
"Productos.Nombre": 1,
"Productos.Precio": 1,
"Descuento": {$subtract : [{$sum : "$Productos.Precio"},{$multiply : [{$sum : "$Productos.Precio"}, 0.1]}]}
}
}
]).pretty()
我认为您应该使用聚合框架 (https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/) 的 $unwind 运算符规范化 Productos 数据。
我不确定你想要什么首选格式,但这是我提出的查询:
db.tienda.aggregate( [
{ $unwind: "$Productos" },
{ $project: {
"Productos.Nombre": 1,
"Productos.Precio": 1,
"Productos.Descuento": {
$multiply: [
"$Productos.Precio",
1-0.10
]
}
}
},
{ $group: {
_id: "$_id",
Productos: { $push: "$Productos" }
}
}
])
我添加了 $group 运算符,然后将 Productos 数组组合在一起。
请注意,我没有使用 $sum 运算符来计算价格乘数,而是简单地执行运算 1-0.10 来计算乘数。
下午好,您如何查询:商品的每个价格 ("Precios") 10% 的折扣。
我正在尝试使用查询:
db.tienda.aggregate( [
{
$project: {
"Productos.Nombre": 1,
"Productos.Precio": 1,
"Descuento": {
$sum: [
"$Productos.Precio",
{
$multiply: [
"$Productos.Precio",
-0.10
]
}
]
}
}
}
] )
我的文档结构是:
db.tienda.insert( [
{
"Codigo": 1, "Nombre": "Fabrica comida",
"Productos": [ { "Codigo": "C1", "Nombre": "Papitas", "Precio": 1.20 }, {
"Codigo": "C2", "Nombre": "Perro caliente", "Precio": 3.10 }, { "Codigo":
"C3", "Nombre": "Hamburguesa", "Precio": 4 }, { "Codigo": "C4", "Nombre":
"Pizza", "Precio": 2.60 }, { "Codigo": "C5", "Nombre": "Malteada",
"Precio": 3 } ]
},
{
"Codigo": 2, "Nombre": "Tecnologia",
"Productos": [ { "Codigo": "T1", "Nombre": "Producto 8", "Precio": 300 }, {
"Codigo": "T2", "Nombre": "Smart TV", "Precio": 1200 }, { "Codigo": "T3",
"Nombre": "Teatro en casa", "Precio": 250 }, { "Codigo": "T4", "Nombre":
"Laptop", "Precio": 560 }, { "Codigo": "T5", "Nombre": "DVD", "Precio": 160
} ]
},
{
"Codigo": 3, "Nombre": "Deportes",
"Productos": [ { "Codigo": "D1", "Nombre": "Balon de futbol", "Precio": 20
}, { "Codigo": "D2", "Nombre": "Bate de baseball", "Precio": 49.99 }, {
"Codigo": "D3", "Nombre": "Canilleras", "Precio": 7.80 }, { "Codigo": "D4",
"Nombre": "Equipo de buceo", "Precio": 650 }, { "Codigo": "D5", "Nombre":
"Raqueta de tenis", "Precio": 25.50 } ]
},
{
"Codigo": 4, "Nombre": "Muebles",
"Productos": [ { "Codigo": "M1", "Nombre": "Armario", "Precio": 330 }, {
"Codigo": "M2", "Nombre": "Mesa de centro", "Precio": 60 }, { "Codigo":
"M3", "Nombre": "Comedor", "Precio": 1090 }, { "Codigo": "M4", "Nombre":
"Sala-Comedor", "Precio": 860 }, { "Codigo": "M5", "Nombre": "Lampara",
"Precio": 40 } ]
},
{
"Codigo": 5, "Nombre": "Hobbies",
"Productos": [ { "Codigo": "H1", "Nombre": "Mesa de hockey", "Precio": 320
}, { "Codigo": "H2", "Nombre": "Mesa de ping-pong", "Precio": 610 }, {
"Codigo": "H3", "Nombre": "Mesa de billar", "Precio": 2400 }, { "Codigo":
"H4", "Nombre": "Consola de videojuegos", "Precio": 220 }, { "Codigo":
"H5", "Nombre": "Mesa de poker", "Precio": 1650 } ]
}
] )
知道执行查询的方式是什么吗?
提前致谢
试试这个聚合来计算所有产品的 10% 折扣
db.tienda.aggregate([
{
$project: {
"Productos.Nombre": 1,
"Productos.Precio": 1,
"Descuento": {$subtract : [{$sum : "$Productos.Precio"},{$multiply : [{$sum : "$Productos.Precio"}, 0.1]}]}
}
}
]).pretty()
我认为您应该使用聚合框架 (https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/) 的 $unwind 运算符规范化 Productos 数据。
我不确定你想要什么首选格式,但这是我提出的查询:
db.tienda.aggregate( [
{ $unwind: "$Productos" },
{ $project: {
"Productos.Nombre": 1,
"Productos.Precio": 1,
"Productos.Descuento": {
$multiply: [
"$Productos.Precio",
1-0.10
]
}
}
},
{ $group: {
_id: "$_id",
Productos: { $push: "$Productos" }
}
}
])
我添加了 $group 运算符,然后将 Productos 数组组合在一起。
请注意,我没有使用 $sum 运算符来计算价格乘数,而是简单地执行运算 1-0.10 来计算乘数。