首页 > 解决方案 > mongoDB "$lookup 的参数必须是字符串,let: .... is type 3",

问题描述

如何对作为 ids(long) 数组而不是单个 id 的字段进行 $lookup?尝试通过_id从集合'products'中检索产品信息,将其放入数组中,然后将产品信息列表嵌入到仓库的文档中。

不幸的是,我们的 mongo 数据库是 3.2,因此新功能允许使用数组查找(https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#use-lookup-with-an-array) t 申请。

在网上浏览了一堆解决方案,这似乎是最接近的,https://stackoverflow.com/a/50207150,将其修改为以下内容:

db.getCollection('warehouses').aggregate([

   {"$match": 
        // conditions to be matched
   },
    { $lookup:
       {
         from: 'products',
         let: {'productIds' : '$productIds' },
         pipeline: [
           { $match: { $expr: {$in: ["$_id", "$$productIds"] } } },
         ],
         as: 'productLists'
       }
     }
])

但是,它收到以下错误:

"arguments to $lookup must be strings, let: .... is type 3".

_id 是数字(长)而不是字符串,有什么解决方法吗?谢谢。

仓库文件样本:

{
    "_id" : NumberLong(1),
    productIds: [NumberLong(1), NumberLong(2), NumberLong(3)],
    "warehouseProperty1" : "warehouseProperty1",
    "warehouseProperty2" : "warehouseProperty2",
    "warehouseProperty3" : "warehouseProperty3",
    "warehouseProperty4" : "warehouseProperty4"
}

样本产品文件:

{
    "_id" : NumberLong(1),
    "productProperty1" : "productProperty1",
    "productProperty2" : "productProperty2",
    "productProperty3" : "productProperty3",
    "productProperty4" : "productProperty4"
}

期望的输出:

{
    "_id" : NumberLong(1),
    productIds: [
        {
            "_id" : NumberLong(1),
            "productProperty1" : "productProperty1",
            "productProperty2" : "productProperty2",
            "productProperty3" : "productProperty3",
            "productProperty4" : "productProperty4"
        },
        {
            "_id" : NumberLong(2),
            "productProperty1" : "productProperty1",
            "productProperty2" : "productProperty2",
            "productProperty3" : "productProperty3",
            "productProperty4" : "productProperty4"
        },
        {
            "_id" : NumberLong(3),
            "productProperty1" : "productProperty1",
            "productProperty2" : "productProperty2",
            "productProperty3" : "productProperty3",
            "productProperty4" : "productProperty4"
        },
    ],
    "warehouseProperty1" : "warehouseProperty1",
    "warehouseProperty2" : "warehouseProperty2",
    "warehouseProperty3" : "warehouseProperty3",
    "warehouseProperty4" : "warehouseProperty4"
}

标签: mongodb

解决方案


推荐阅读