是否可以创建一个 Mongoose 钩子来将投影应用于所有查询

Nat*_*May 3 hook mongoose mongodb

我想防止每次用户请求他们的信息时通过线路发送用户的加密密码。我知道在 mongo 中我可以应用投影来实现这一目标

db.users.findByID(_id, { password: 0 } )
Run Code Online (Sandbox Code Playgroud)

但我更喜欢有某种.pre()挂钩,将其应用于每个查询。这是可能的或功能等效的吗?

rob*_*lep 6

您可以配置一个字段,以便默认情况下使用select以下命令将其从查询中排除:

let UserSchema = new Schema({
  ...
  password : { type : String, select : false },
  ...
});
Run Code Online (Sandbox Code Playgroud)

如果确实需要返回该字段,则可以在每个查询的基础上覆盖它:

db.users.findByID(_id, { password: 1 } )
Run Code Online (Sandbox Code Playgroud)

记录在这里:http : //mongoosejs.com/docs/api.html#schematype_SchemaType-select