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){ ... });
我有一个带有布尔类型激活字段的用户模式。我只想查询 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){ ... });