簡體   English   中英

如何在mongodb中的同一集合中查詢大於不同文檔中的值?

[英]How to query greater than values in different documents from same collection in mongodb?

我有一個銷售集合如下。 我想使用 mongo shell 查詢以查找成本大於 20 的產品詳細信息。

[{
  "Customer_Info":{
        "Customer_Id": 1,
      "First_Name": "John",
      "Last_Name": "Smith",
      "Address": "Sydney",
      "State": "Sydney",
      "Postcode": "0920",
      "Phone": "0143464663"
  },
  "Order_Info": [
    {
      "Order_Id": 1,
      "Order_Date": "01-01-2020",
      "Delivery_Date": "01-01-2020",
      "Line_Info": [
        {
          "Line_Id": 1,
          "Line_Price": 100,
          "Line_Units_Added": 2,
          "Product_Info": {
            "Product_Id": 300,
            "Product_Name": "Orange",
            "Product_Description": "Fruit",
            "Number_in_Stock": 50,
            "Product_Weight": 1,
            "Product_Cost": 300,
            "Product_in_Date": "01-01-2020",
            "Product_Type": "Fruits",
            "Farmer_Info": {
              "Farmer_Id": 123,
              "Farmer_First_Name": "Drake",
              "Farmer_Last_Name": "Levine",
              "Farmer_Address": "Sydney",
              "Farmer_State": "Sydney",
              "Farmer_Post_Code": "1200"
            }
          }
        },
        {
          "Line_Id": 5,
          "Line_Price": 25,
          "Line_Units_Added": "1",
          "Product_Info": {
            "Product_Id": 305,
            "Product_Name": "Banana",
            "Product_Description": "Fruit",
            "Number_in_Stock": 100,
            "Product_Weight": 1,
            "Product_Cost": 100,
            "Product_in_Date": "01-01-2020",
            "Product_Type": "Fruits",
            "Farmer_Info": {
              "Farmer_Id": 123,
              "Farmer_First_Name": "Drake",
              "Farmer_Last_Name": "Levine",
              "Farmer_Address": "Sydney",
              "Farmer_State": "Sydney",
              "Farmer_Post_Code": "1200"
            }
          }
        },
        {
          "Line_Id": 6,
          "Line_Price": 100,
          "Line_Units_Added": "1",
          "Product_Info": {
            "Product_Id": 305,
            "Product_Name": "Jackfruit",
            "Product_Description": "Fruit",
            "Number_in_Stock": 20,
            "Product_Weight": 1,
            "Product_Cost": 50,
            "Product_in_Date": "01-01-2020",
            "Product_Type": "Fruits",
            "Farmer_Info": {
              "Farmer_Id": 123,
              "Farmer_First_Name": "Drake",
              "Farmer_Last_Name": "Levine",
              "Farmer_Address": "Sydney",
              "Farmer_State": "Sydney",
              "Farmer_Post_Code": "1200"
            }
          }
        },
        {
          "Line_Id": 7,
          "Line_Price": 200,
          "Line_Units_Added": 1,
          "Product_Info": {
            "Product_Id": 310,
            "Product_Name": "Dragon Fruit",
            "Product_Description": "Fruit",
            "Number_in_Stock": 10,
            "Product_Weight": 1,
            "Product_Cost": 2,
            "Product_in_Date": "01-01-2020",
            "Product_Type": "Fruits",
            "Farmer_Info": {
              "Farmer_Id": 123,
              "Farmer_First_Name": "Drake",
              "Farmer_Last_Name": "Levine",
              "Farmer_Address": "Sydney",
              "Farmer_State": "Sydney",
              "Farmer_Post_Code": "1200"
            }
          }
        }
      ]
    },
    {
      "Order_Id": 2,
      "Order_Date": "01-01-2020",
      "Delivery_Date": "01-01-2020",
      "Line_Info": [
        {
          "Line_Id": 2,
          "Line_Price": 200,
          "Line_Units_Added": 2,
          "Product_Info": {
            "Product_Id": 301,
            "Product_Name": "Mango",
            "Product_Description": "Fruit",
            "Number_in_Stock": 50,
            "Product_Weight": 1,
            "Product_Cost": 500,
            "Product_in_Date": "01-01-2020",
            "Product_Type": "Fruits",
            "Farmer_Info": {
              "Farmer_Id": 123,
              "Farmer_First_Name": "Drake",
              "Farmer_Last_Name": "Levine",
              "Farmer_Address": "Sydney",
              "Farmer_State": "Sydney",
              "Farmer_Post_Code": "1200"
            }
          }
        }
      ]
    }
  ]
},{
  "Customer_Info":{
  "Customer_Id": 2,
  "First_Name": "Popeye",
  "Last_Name": "Sailorman",
  "Address": "Sydney",
  "State": "Sydney",
  "Postcode": "0920",
  "Phone": "123456"},
  "Order_Info": [
    {
      "Order_Id": 3,
      "Order_Date": "01-01-2020",
      "Delivery_Date": "01-01-2020",
      "Line_Info": [
        {
          "Line_Id": 3,
          "Line_Price": 50,
          "Line_Units_Added": 5,
          "Product_Info": {
            "Product_Id": 500,
            "Product_Name": "Spinach",
            "Product_Description": "Vegetables",
            "Number_in_Stock": 30,
            "Product_Weight": 1.5,
            "Product_Cost": 30,
            "Product_in_Date": "01-01-2020",
            "Product_Type": "Veg",
            "Farmer_Info": {
              "Farmer_Id": "420",
              "Farmer_First_Name": "Olive",
              "Farmer_Last_Name": "Lewine",
              "Farmer_Address": "Sydney",
              "Farmer_State": "Sydney",
              "Farmer_Post_Code": "1200"
            }
          }
        }
      ]
    }
  ]
}]

想使用 mongo shell 查找那些大於 20 的產品名稱和產品成本。 我做了如下:

db.sales.find( { "Order_Info.Line_Info.Product_Info.Product_Cost": { $gt: 20} }, {"_id": 0, 
    "Order_Info.Line_Info.Product_Info.Product_Name": 1, 
    "Order_Info.Line_Info.Product_Info.Product_Cost": 1} ).pretty();

但不幸的是它只返回第一個文檔值。 如何實現?

您可以通過聚合來實現這一點

  1. $map有助於處理數組中的每個元素
  2. $filter有助於使用條件和過濾器

蒙戈腳本

[
  {
    $project: {
      Order_Info: {
        $map: {
          input: "$Order_Info",
          in: {
            $filter: {
              input: "$$this.Line_Info",
              cond: {
                $gt: [
                  "$$this.Product_Info.Product_Cost",
                  30
                ]
              }
            }
          }
        }
      }
    }
  }
]

工作Mongo 游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM