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); }); });
Je veux obtenir des données de la 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 } ]
et remplacez l’ID fournisseur en tant que nom fournisseur de la collection
[ { "_id": "5b9d25064dcf2327b449ae1b", "supplierExist": true, "supplierName": "NBA World Wide", "supplierStatus": "Available", "supplierTimeStamp": "2018-09-15T15:28:06.971Z", "__v": 0 } ]
Pour faire une jointure avec deux tables, assurez-vous que le type des champs, c’est-à-dire localField
et foriegnField
doit être identique.
Ou
Avec mongodb 4.0, vous pouvez facilement changer le type de Ssortingng
en ObjectId
utilisant l’agrégation $toObjectId
productSchema.aggregate([ { "$lookup": { "from": "supplierSchema", "let": { "supplierId": { "$toObjectId": "$supplierId" }}, "pipeline": [ { "$match": { "$expr": { "$eq": ["$_id", "$$supplierId"] }}} ] as: "supplier" }} ])