我有一个汇总查询,其中加入了3个集合。我想根据其中两个集合的字段来过滤搜索。问题是,我只能在用猫鼬初始化的初始集合上使用$ match。
以下是查询:
var pipeline = [
{
$lookup: {
from: 'blurts',
localField: 'followee',
foreignField: 'author.id',
as: 'followerBlurts'
}
},
{
$unwind: '$followerBlurts'
},
{
$lookup: {
from: 'users',
localField: 'followee',
foreignField: '_id',
as: 'usertbl'
}
},
{
$unwind: '$usertbl'
},
{
$match: {
'follower': { $eq: req.user._id },
//'blurtDate': { $gte: qryDateFrom, $lte: qryDateTo }
}
},
{
$sample: { 'size': 42 }
},
{
$project: {
_id: '$followerBlurts._id',
name: '$usertbl.name',
smImg: '$usertbl.smImg',
text: '$followerBlurts.text',
vote: '$followerBlurts.vote',
blurtDate: '$followerBlurts.blurtDate',
blurtImg: '$followerBlurts.blurtImg'
}
}
];
keystone.list('Follow').model.aggregate(pipeline)
.sort({blurtDate: -1})
.cursor().exec()
.toArray(function(err, data) {
if (!err) {
res.json(data);
} else {
console.log('Error getting following blurts --> ' + err);
}
});
在管道中,我只能在“关注”模型上使用$ match。当我在“模糊”模型上使用$ match时,它只是忽略了条件(您可以在$ match下的注释行中看到尝试将其包括在内的位置)。
令人困惑的是,我可以在.sort方法中使用此字段,但不能在$ match条件中使用。
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用mongo 点符号来访问通过$lookup
查找的集合中的元素。
https://docs.mongodb.com/manual/core/document/#dot-notation
因此,在这种情况下,followerBlurts.blurtDate
应该为您提供所需的值。