Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何获取从一个集合到另一个集合的引用数据?数据_Node.js_Mongodb_Express_Aggregation Framework - Fatal编程技术网

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"
  }}
])