【问题标题】:Mongoose aggregate pipeline not working as expected [duplicate]Mongoose 聚合管道未按预期工作 [重复]
【发布时间】:2018-11-16 18:12:42
【问题描述】:

我正在尝试使用 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 集合中,但它是objectIdcompany 集合中的一个。 任何人都可以确认吗?如果这是问题,我不知道如何解决它......有人可以帮忙吗?提前致谢!

【问题讨论】:

  • 问题确实是不同的类型。正如referenced answer 所述,解决方案是“修复您的数据”,而不是像建议的那样在运行时使用新方法进行转换。该答案实际上准确地说明了为什么运行时强制转换不是答案以及为什么您确实需要更正您的数据。它还展示了如何以有效方式转换数据的示例。

标签: mongodb mongoose aggregation-framework


【解决方案1】:

你的假设是正确的。

$lookup时,本地字段和远程字段必须是同一类型。

查找时无法进行转换器,afaik。

这是相关问题:

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

3.7.3版本已经实现

现在您可能想要更改数据类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 2020-03-15
    • 2021-03-10
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多