Mongoose聚合管道未按预期工作

时间:2018-06-06 23:13:27

标签: mongodb mongoose aggregation-framework

我正在尝试使用Mongoose聚合管道同时查询我的User集合和Company集合。 具体来说,我尝试返回所有users并返回用户关联的companyName。每个用户都有companyId个属性 映射到company _id字段。以下是我的示例usercompany文档:

User:
{
    _id: ObjectId("5b12ef5ba07ce1f8b212f07b"),
    companyId: "12345"
    first: "John",
    last: "Doe",
}

Company:

{
    _id: ObjectId("12345"),
    companyName: "UPS"
}

这是我的查询代码:

User.aggregate([{
    $match: {}
    },
    {
        $lookup: {
            localField: "companyId",
            from: "company",
            foreignField: "_id",
            as: "companyInfo"
        }
    },
    {
        $unwind: "$companyInfo"
    },
    {
        $project: {
            first: 1,
            last: 1,
            "companyInfo.companyName": 1,
        }
    }
], (err, users) => {
    console.log(users) // returns []
});

我认为原因是companyId被存储为我的User集合中的字符串,但它是objectId集合中的company。 谁能确认一下?如果是问题,我不确定如何解决它...有人可以帮忙吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

你的假设是正确的。

执行$lookup时,本地字段和远程字段必须属于同一类型。

afaik查找时无法进行转换。

这是相关问题:

https://jira.mongodb.org/browse/SERVER-22781

版本3.7.3已实现

目前您可能想要更改数据类型