[英]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()
方法,它将日期转换为字符串。 我所做的只是删除该方法并传递了dateTo
和dateFrom
日期,现在它可以工作了。
我建议一个一个地测试查询的每个部分。首先只需运行查找部分以查看结果的样子。然后运行匹配。然后添加展开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.