繁体   English   中英

如何在 MongoDB 聚合中使用 $lookup 和 $match ?

[英]How to use $lookup and $match against it in MongoDB aggregation?

我在 Mongodb 中的聚合遇到问题。 我有一个 model 用户和 UserExtra 以及有关用户的更多详细信息。 我需要进行 $lookup 以将 UserExtra 连接到用户 output。 但希望能够根据年龄、性别和城市过滤结果,这些都是 UserExtra 的一部分。 我当前的查询如下,它应该返回结果但返回空数组。

    const match = {
        'userExtra.age': {
            $gt: dateTo.toISOString(),
            $lt: dateFrom.toISOString()
        },
        'userExtra.gender': gender
    }

    if (city) match['userExtra.city'] = city;

    const users = await User.aggregate([
        {
            $lookup: {
                from: 'user_extra',
                localField: 'userExtra',
                foreignField: '_id',
                as: 'userExtra'
            }
        },
        {
            $match: match
        },
        {
            $unwind: "$userExtra"
        }
    ]);

    res.send(users);

您必须先展开查找结果,然后再匹配管道。

let pipelineQuery = [
    {
        $lookup: {
            from: 'user_extra',
            localField: 'userExtra',
            foreignField: '_id',
            as: 'userExtra'
        }
    },
    {
        $unwind: "$userExtra"
    },
    {
        $match: match
    },
]

嘿伙计们,我想通了。 我正在使用toIsoString()方法,它将日期转换为字符串。 我所做的只是删除该方法并传递了dateTodateFrom日期,现在它可以工作了。

我建议一个一个地测试查询的每个部分。首先只需运行查找部分以查看结果的样子。然后运行匹配。然后添加展开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM