Mongoose虚拟机中的Where选项



我正在尝试获取已填充项目的计数作为响应,但我希望在计数之前过滤已填充的数据。

示例

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方法执行(例如findfindById等(,但这实际上取决于您希望在查询中实现的功能。

最新更新