Node.js 如何获取从一个集合到另一个集合的引用数据?数据
我想从收集中获取数据Node.js 如何获取从一个集合到另一个集合的引用数据?数据,node.js,mongodb,express,aggregation-framework,Node.js,Mongodb,Express,Aggregation Framework,我想从收集中获取数据 router.get('/productSelect', (req, res, next) =>{ productSchema.aggregate([ { $lookup: { from: 'supplierSchema', localField: 'supplierId', foreignField: '_id',
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);
});
});
并将supplierId替换为集合中的supplierName
[
{
"_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
}
]
要与两个表联接,必须确保两个字段的类型,即
localField
和foriegnField
应相同
或
使用mongodb4.0可以使用聚合轻松地将字符串的类型更改为ObjectId
[
{
"_id": "5b9d25064dcf2327b449ae1b",
"supplierExist": true,
"supplierName": "NBA World Wide",
"supplierStatus": "Available",
"supplierTimeStamp": "2018-09-15T15:28:06.971Z",
"__v": 0
}
]
上面的代码有什么问题?可能是您的集合名称不正确。您使用的是mongoose还是mongodb native?好的,然后在上面的代码中输入相同的内容:“supplierschemas”
您的supplierId
类型是产品模式中的字符串,这就是它不获取数据的原因。您需要将其作为objectId保存。。。顺便问一下,您的mongodb版本是什么?是的,您可以使用多个$lookup
阶段
productSchema.aggregate([
{ "$lookup": {
"from": "supplierSchema",
"let": { "supplierId": { "$toObjectId": "$supplierId" }},
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$_id", "$$supplierId"] }}}
]
as: "supplier"
}}
])