In MongoDB I have a collection named ‘products’ and another ‘cart’. The cart contains a property named ‘items’ which contains the properties from ‘product_id’ and 'quantity (an array [{product_id: 1, quantity: 3}, {product_id:2, quantity: 5}]). I want to get each product by id from cart.How can do that using the MongoDB syntax?
Please provide sample documents and expected results that we can cut-n-paste to experiment with your issue.
Cart collection
{
"_id": {
"$oid": "655c96045a3f7cf3b41294fa"
},
"customer_id": "655c96035a3f7cf3b41294f5",
"items": [
{
"product_id": "655bb95bd9360f21070eac69",
"quantity": 5,
"_id": {
"$oid": "655cae906625806b7171bd9b"
}
},
{
"product_id": "655bb95bd9360f21070eac67",
"quantity": 4,
"_id": {
"$oid": "655cafe4b346231f1ff62136"
}
}
],
"__v": 0
}
Products collection
[{
"_id": {
"$oid": "655bb95bd9360f21070eac69"
},
"name": "Incredible Metal Car",
"description": "Utroque tenus quasi auditor possimus aptus adstringo vinitor curo nam cognatus communis victoria aspicio celebrer atrocitas vesica dens texo verecundia saepe adhaero terebro caries totidem vigor adsum audax vobis sequi conventus id statua adulescens adulatio culpo recusandae sonitus vere coniecto terga omnis vorax cras contigo textor summa cetera ustulo studio bellicus defluo pauci timor cado.",
"images": [
"https://loremflickr.com/450/300/cars?lock=6230960368517120",
"https://loremflickr.com/600/700/cars?lock=4379153337942016",
"https://loremflickr.com/600/700/cars?lock=4729633941487616",
"https://loremflickr.com/600/700/cars?lock=8106708935114752",
"https://loremflickr.com/600/700/cars?lock=1036638643814400"
],
"price": 511,
"discount": 15.25,
"stock": 237,
"created_date": {
"$date": "2023-06-06T14:57:49.711Z"
},
"__v": 0
},
{
"_id": {
"$oid": "655bb95bd9360f21070eac67"
},
"name": "Awesome Steel Gloves",
"description": "Adamo audentia nemo vulgivagus coniecto perferendis viridis appello uredo volo atqui absorbeo ustilo vestigium adeptio ab addo atavus ago cupio cibo vestrum quis voluptas audio victoria adimpleo vita stips adulatio dens deludo thymbra curatio ceno defero benevolentia aiunt arguo auctor defungo blandior clementia voluptas verbera degenero crustulum adsuesco dedecor casso defero hic inflammatio vinco vehemens sollicito praesentium pariatur bene contego tergiversatio truculenter armarium baiulus statim nulla desino adamo.",
"images": [
"https://loremflickr.com/450/300/cars?lock=6292171902681088",
"https://loremflickr.com/600/700/cars?lock=4589097999925248",
"https://loremflickr.com/600/700/cars?lock=6811603626360832",
"https://loremflickr.com/600/700/cars?lock=3368098665070592",
"https://loremflickr.com/600/700/cars?lock=2736850840059904",
"https://loremflickr.com/600/700/cars?lock=622830622343168",
"https://loremflickr.com/600/700/cars?lock=3057699604398080",
"https://loremflickr.com/600/700/cars?lock=7826422791929856",
"https://loremflickr.com/600/700/cars?lock=6864379389673472",
"https://loremflickr.com/600/700/cars?lock=1432591311831040"
],
"price": 776,
"discount": 38.81,
"stock": 68,
"created_date": {
"$date": "2023-03-02T03:32:01.535Z"
},
"__v": 0
}]
This is a simple $lookup.
Like:
db.cart.aggregate( [
{ $lookup : {
from : "products" ,
localField : "items.product_id" ,
foreignField : "_id" ,
as : "products"
} }
] ) ;