我正在尝试获取填充项的计数,但我想在计数之前过滤填充数据。
示例
Team.virtual('membersOlderThan18', {
ref: 'Member',
localField: 'team',
foreignField: '_id',
count: true // Set `count: true` on the virtual
options: { HERE IF AGE > 18 }
});
我不确定是否完全可行,因为我找不到任何示例。
非常简单,您不能。在数据已经返回给您的客户端之后,在猫鼬将其移交给您之前,添加虚拟对象。 MongoDB没有Mongoose虚拟的回忆,因此不能在查询中使用它们。
但是,您可以像这样直接查询您的members
集合来完成相同的事情:
Member.find({
teamId: '<the_team_id>',
age: {$gt: 18}
});
我同意@chrispytoes提供的答案。但是,您也可以实现查询中间件(也称为“挂钩”),该中间件允许您在执行特定查询之前或之后运行函数。在这种情况下,您需要一个预查找的挂钩,该挂钩将在实际执行查询之前执行:
yourSchema.pre(/^find/, function(next) {
this.find({ age: { $gt: 18 } });
next();
});
我使用了正则表达式(/^find/
),以便该中间件将对Mongoose中的每个find方法(例如find
,findById
等)执行,但这实际上取决于您要实现的功能在您的查询中。