猫鼬虚拟人的选项

问题描述 投票:0回答:2

我正在尝试获取填充项的计数,但我想在计数之前过滤填充数据。

示例

Team.virtual('membersOlderThan18', {
  ref: 'Member',
  localField: 'team',
  foreignField: '_id',
  count: true // Set `count: true` on the virtual
  options: { HERE IF AGE > 18 }
});

我不确定是否完全可行,因为我找不到任何示例。

node.js mongodb mongoose virtual
2个回答
1
投票

非常简单,您不能。在数据已经返回给您的客户端之后,在猫鼬将其移交给您之前,添加虚拟对象。 MongoDB没有Mongoose虚拟的回忆,因此不能在查询中使用它们。

但是,您可以像这样直接查询您的members集合来完成相同的事情:

Member.find({
  teamId: '<the_team_id>',
  age: {$gt: 18}
});

1
投票

我同意@chrispytoes提供的答案。但是,您也可以实现查询中间件(也称为“挂钩”),该中间件允许您在执行特定查询之前或之后运行函数。在这种情况下,您需要一个预查找的挂钩,该挂钩将在实际执行查询之前执行:

yourSchema.pre(/^find/, function(next) {
    this.find({ age: { $gt: 18 } });
    next();
});

我使用了正则表达式(/^find/),以便该中间件将对Mongoose中的每个find方法(例如findfindById等)执行,但这实际上取决于您要实现的功能在您的查询中。

© www.soinside.com 2019 - 2024. All rights reserved.