如何在mongodb中查询来自同一集合的不同文档中大于的值?

如何在mongodb中查询来自同一集合的不同文档中大于的值?,mongodb,mongodb-shell,Mongodb,Mongodb Shell,我有一个销售收集如下。我想使用mongo shell查询成本超过20美元的产品详细信息 [{ "Customer_Info":{ "Customer_Id": 1, "First_Name": "John", "Last_Name": "Smith", "Address": "Sydney&q

我有一个销售收集如下。我想使用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();

但不幸的是,它只返回第一个文档值。如何实现它?

您可以通过聚合实现这一点

  • $map
    有助于匹配数组中的每个元素
  • $filter
    帮助使用条件和过滤器
  • 蒙哥文字

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

    工作

    截至上述数据,只有两份文件。这就是为什么它只返回2个文档。