问题是
有多少种产品有折扣?有多少“水”产品没有折扣?有多少产品以“超级”的名义出现?有多少产品的折扣大于30%?哪个品牌在“油”区销售的产品最多?
数据格式
{"_id":{"$oid":"62363ce631312ffd2dc724f5"},
{"Title":"Fortune mega"},
{"Brand":"Gewti Laurent}"
{"Name":"lorem ipsum"},
{"Original_Price":590},
{"Sale_price":590},
{"Product_category":"Oil"}
{"_id":{"$oid":"62363ce631342ffd2dc724f5"},
{"Title":"katy mega"},
{"Brand":"Gewti Laurent},
{"Name":"targi"},
{"Original_Price":1890},
{"Sale_price":1890},
{"Product_category":"Oil"}
{"_id":{"$oid":"62363ce641312ffd2dc724f5"},
{"Title":"ydnsu"},
{"Brand":"Gewti Laurent},
{"Name":"otgu"},
{"Original_Price":1390},
{"Sale_price":1290},
{"Product_category":"Water"}
{"_id":{"$oid":"62363ce431312ffd2dc724f5"},
{"Title":"ykjssu"},
{"Brand":"Gewti Laurent},
{"Name":"itru"},
{"Original_Price":190},
{"Sale_price":170},
{"Product_category":"Water"}发布于 2022-03-21 05:33:42
这里使用的是聚合管道:
有折扣的
db.collection.aggregate([
{
"$match": {
"$expr": {
"$lte": [
"$Sale_Price",
"$Original_Price"
]
}
}
}
])db.collection.aggregate([
{
"$match": {
"Product_category": "Water",
"$expr": {
"$gte": [
"$Sale_Price",
"$Original_Price"
]
}
}
}
])注:如果您想要相反的,即发现Water产品有折扣,只需将$gte改为$lte
名为“超级”的
db.collection.find({
"Title": {
"$regex": "mega"
}
})注意:这不是聚合。可以直接删除此查询。
折扣大于30%的
db.collection.aggregate([
{
"$addFields": {
"discount_in_percent": {
"$multiply": [
{
"$divide": [
{
"$subtract": [
"$Original_Price",
"$Sale_price"
]
},
"$Original_Price"
]
},
100
],
}
}
},
{
"$match": {
"Product_category": "Water",
"$expr": {
"$gte": [
"$discount_in_percent",
30
]
}
}
}
])注意:这有点过分,但它会让你知道产品的折扣百分比。
你的最后一个问题,找到一个特定类别下的大多数销售产品是模糊的,正如@Rohit所指出的那样。但从给定的数据来看,它可以是折扣最高的产品。为此,您可以通过调整$expr选择器和使用$project操作符来获得特定产品来处理第二个查询。
因为您的问题更多地是关于how many而不是which的,所以您可以在$size上查找以获得计数或loop结果。
发布于 2022-03-21 04:10:03
db.products.find().toArray().filter(product => product.Sale_price < product.Original_Price).length
find()返回数据库中的所有产品,toArray()转换为可以使用其他函数的数组。然后,filter()要求查看列表中的每个产品,并返回一个新的产品列表,其中Sale_price低于Original_Price,.length只测量该列表的长度。
db.products.find({"Product_category": "Water"}).toArray().filter(product => product.Sale_price >= product.Original_Price).length
与第一个类似,除了find()接受一个过滤器按产品类别进行筛选外,filter()接受另一个过滤器。
db.products.find({"Name": {$regex: /mega/}}).toArray().length
这里使用正则表达式搜索包含mega的单词。
db.products.find().toArray().filter(product => (product.Original_Price-product.Sale_price) > 0.3*product.Original_Price).length
与之前类似,只需更改筛选器即可。
这些命令将在Mongo中工作。如果需要使用类似的函数通过节点或python查询数据库,请参阅文档。
https://stackoverflow.com/questions/71552576
复制相似问题