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