Javascript mongoose文档筛选属性

Javascript mongoose文档筛选属性,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我定义了一个类似的模式 var UserSchema = new Schema({ firstName: { type: String, required: true }, lastName: { type: String, required: true }, email: { type: String, required: true }, location: { type: String, required: true }, picture: { type: String,

我定义了一个类似的模式

var UserSchema = new Schema({
  firstName: { type: String, required: true },
  lastName: { type: String, required: true },
  email: { type: String, required: true },
  location: { type: String, required: true },
  picture: { type: String, required: true },
  passwordHash: { type: String, required: true },
  resetPasswordToken: String,
  resetPasswordExpired: Boolean
});
我有一个REST端点,它返回所有用户的列表。在该列表中,我想隐藏一些属性,例如,
passwordHash、resetPasswordToken、resetPasswordExpired

我定义了一个自定义过滤器函数,如下所示

var doFilterUser = function(user) {
  _.omit(user, ['passwordHash', 'resetPasswordToken', 'resetPasswordExpired']);
   user.id = user._id;
   delete user._id;
   delete user.__v;
   return user;
};
\u
是洛达斯

当我检查API是否响应所有用户属性时

这个过滤函数是在CommonHelper模块中定义的,我这样调用它

User.findOne({_id: id}, function(err, user) {
  var filtered = helper.doFilterUser(user);
});

如何解决此问题?

这里的问题是您仍然有一个符合s严格模式的mongoose文档。如果要更改该文档,则需要使其成为“原始”对象,而无需所有其他控件:

User.findOne({_id: id}, function(err, user) {
  var filtered = helper.doFilterUser(user.toObject());
});
因此这里的
.toObject()
方法将返回原始形式的对象。这样,您就可以随心所欲地操作按键。

尝试以下操作: 您可以通过mongoose访问某些值

User.findOne({_id: id}, 'firstName lastName email location picture', function(err, user){
  console.log(user);
}))

您只需在查询之后提及所需的字段


希望它有帮助……

您也可以明确指示它不要返回某些属性。如果您不想通过网络呈现散列密码,则此选项非常有用。find方法如下所示:

User.find({}, '-id -__v',function(err,users){
})

User.findOne({_id: id}, '-id -__v',function(err,user){
})