【问题标题】:How can I get data referencing form one collection to another? Mongodb如何获取从一个集合到另一个集合的数据引用?蒙古数据库
【发布时间】:2019-02-24 00:30:34
【问题描述】:
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);
    });
});

我想从集合中获取数据

[
  {
    "_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
  }
]

并将supplierId替换为collection中的supplierName

[
  {
    "_id": "5b9d25064dcf2327b449ae1b",
    "supplierExist": true,
    "supplierName": "NBA World Wide",
    "supplierStatus": "Available",
    "supplierTimeStamp": "2018-09-15T15:28:06.971Z",
    "__v": 0
  }
]

【问题讨论】:

  • 以上代码有什么问题?
  • 可能是您的收藏名称不正确。你使用的是猫鼬还是 mongodb native?
  • 好的,然后在上面的代码from: "supplierschemas"
  • 您的 supplierId 类型是产品架构中的字符串,这就是它不获取数据的原因。您需要将其保留为 objectId...顺便说一句,您的 mongodb 版本是什么?
  • 是的,您可以使用多个 $lookup 阶段

标签: node.js mongodb express aggregation-framework


【解决方案1】:

为了与两个表进行连接,您必须确保两个字段的类型,即localFieldforiegnField 应该相同。

或者

使用 mongodb 4.0,您可以使用 $toObjectId 聚合轻松地将 String 的类型更改为 ObjectId

productSchema.aggregate([   
  { "$lookup": {
    "from": "supplierSchema",
    "let": { "supplierId": { "$toObjectId": "$supplierId" }},
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$_id", "$$supplierId"] }}}
    ]
    as: "supplier"
  }}
])

【讨论】:

    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2015-09-14
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多