MongooseJS:从查询中隐藏特定文档

MongooseJS: Hide Specific Documents From Query

我有一个带有布尔类型激活字段的用户模式。我只想查询 return 个具有 activated: true 的文档。我希望有一种比为每个 find、findOne 或 findById 添加条件更有效、更干的方法。

最有效的方法是什么?

您可能想看看 Mongoose Query middleware here

Query middleware is supported for the following Model and Query functions.

  • count
  • find
  • findOne
  • ...

例如:

User.pre('find', function() {
  console.log(this instanceof mongoose.Query); // true
  this.activated = true;
});

虽然可能有一些方法可以做到这一点,但始终隐藏此信息通常不是一个好主意。

从尝试使用其他语言和数据库系统执行此操作的经验来看,在某些时候,您会想要/需要加载未激活的项目。但如果您始终只激活 return 个项目,您将永远无法获得所需的列表。

为了您的目的,我建议在您的架构上创建一个 findActive 方法:


someSchema.static("findActive", function(query, cb){
  // check if there is a query and callback
  if (!cb){
    cb = query;
    query = {};
  }

  // set up an empty query, if there isn't one provided
  if (!query) { query = {}; }

  // make sure you only load activated items
  query.activated = true;

  // run the query
  this.find(query, cb);
});

使用此方法,您将拥有与 findOne 相同的 findActive 方法,但它始终会过滤已激活的项目。

MyModel.findActive(function(err, modelList){ ... });

并且它可以选择支持额外的查询过滤器

MyModel.findActive({some: "stuff"}, function(err, modelList){ ... });