首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mongodb中查找一些查询。我必须为每一个问题写一个问句

在mongodb中查找一些查询。我必须为每一个问题写一个问句
EN

Stack Overflow用户
提问于 2022-03-21 03:40:35
回答 2查看 69关注 0票数 -2

问题是

有多少种产品有折扣?有多少“水”产品没有折扣?有多少产品以“超级”的名义出现?有多少产品的折扣大于30%?哪个品牌在“油”区销售的产品最多?

数据格式

代码语言:javascript
复制
{"_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"}
EN

回答 2

Stack Overflow用户

发布于 2022-03-21 05:33:42

这里使用的是聚合管道:

有折扣的

  1. 产品:

代码语言:javascript
复制
db.collection.aggregate([
  {
    "$match": {
      "$expr": {
        "$lte": [
          "$Sale_Price",
          "$Original_Price"
        ]
      }
    }
  }
])

  1. “水”产品没有任何折扣:

代码语言:javascript
复制
db.collection.aggregate([
  {
    "$match": {
      "Product_category": "Water",
      "$expr": {
        "$gte": [
          "$Sale_Price",
          "$Original_Price"
        ]
      }
    }
  }
])

注:如果您想要相反的,即发现Water产品有折扣,只需将$gte改为$lte

名为“超级”的

  1. 产品:

代码语言:javascript
复制
db.collection.find({
  "Title": {
    "$regex": "mega"
  }
})

注意:这不是聚合。可以直接删除此查询。

折扣大于30%的

  1. 产品:

代码语言:javascript
复制
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结果。

票数 0
EN

Stack Overflow用户

发布于 2022-03-21 04:10:03

  1. 有多少种产品有折扣?

db.products.find().toArray().filter(product => product.Sale_price < product.Original_Price).length

find()返回数据库中的所有产品,toArray()转换为可以使用其他函数的数组。然后,filter()要求查看列表中的每个产品,并返回一个新的产品列表,其中Sale_price低于Original_Price,.length只测量该列表的长度。

  1. 有多少“水”产品没有折扣?

db.products.find({"Product_category": "Water"}).toArray().filter(product => product.Sale_price >= product.Original_Price).length

与第一个类似,除了find()接受一个过滤器按产品类别进行筛选外,filter()接受另一个过滤器。

  1. 有多少产品有“超级”的名字?

db.products.find({"Name": {$regex: /mega/}}).toArray().length

这里使用正则表达式搜索包含mega的单词。

  1. 有多少产品的折扣率大于30% ?

db.products.find().toArray().filter(product => (product.Original_Price-product.Sale_price) > 0.3*product.Original_Price).length

与之前类似,只需更改筛选器即可。

  1. 需要更多的输入来解决这个问题。

这些命令将在Mongo中工作。如果需要使用类似的函数通过节点或python查询数据库,请参阅文档。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71552576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档