router.get('/productSelect', (req, res, next) =>{
productSchema.aggregate([
{ $lookup:
{
from: 'supplierSchema',
localField: 'supplierId',
foreignField: '_id',
as: 'supplier'
}
}
], (err, productSchema) =>{
if(err) res.json(err);
else res.json(productSchema);
});
});
I want to get data from collection
[
{
"_id": "5ba26ff33318b51e20a80fb3",
"productExist": true,
"productName": "Anything",
"supplierId": "5b9d25064dcf2327b449ae1b",
"brandId": "5b9d162a316e8d2660f26393",
"categoryId": "5ba2509a6367372568b1ce6d",
"productPrice": 222,
"productQuantity": 320,
"productMax": 3,
"productMin": 4,
"productTimeStamp": "2018-09-19T15:49:07.177Z",
"__v": 0
}
]
and replace the supplierId as supplierName from collection
[
{
"_id": "5b9d25064dcf2327b449ae1b",
"supplierExist": true,
"supplierName": "NBA World Wide",
"supplierStatus": "Available",
"supplierTimeStamp": "2018-09-15T15:28:06.971Z",
"__v": 0
}
]
For making join with two table you have make sure that the type for both the fields ie localField
and foriegnField
should be the same.
Or
With mongodb 4.0 you can easily change the type of the String
to ObjectId
using $toObjectId
aggregation
productSchema.aggregate([
{ "$lookup": {
"from": "supplierSchema",
"let": { "supplierId": { "$toObjectId": "$supplierId" }},
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$_id", "$$supplierId"] }}}
]
as: "supplier"
}}
])
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.