I have a sales collection as following. I want to query using mongo shell to find product details which cost greater than 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"
}
}
}
]
}
]
}]
Want to find those product name and product cost which are greater than 20 using mongo shell. I have done like below:
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();
But unfortunately it returning only the first document values. How to achieve it?
You can achieve this with aggregation
$map
helps to go with each element in array$filter
helps to use condition and filterMongo script
Working Mongo playground