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){
})