猫鼬文档过滤属性
mongoose document filtering properties
我已经定义了一个架构
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 端点,其中包含所有用户的 return 列表。在该列表中,我想隐藏一些属性,即 passwordHash, resetPasswordToken, resetPasswordExpired
我定义了一个自定义过滤器函数,如下所示
var doFilterUser = function(user) {
_.omit(user, ['passwordHash', 'resetPasswordToken', 'resetPasswordExpired']);
user.id = user._id;
delete user._id;
delete user.__v;
return user;
};
_
是 lodash
当我检查我的 API 正在响应所有用户属性时
这个过滤器函数定义在通用辅助模块中,我这样调用它
User.findOne({_id: id}, function(err, user) {
var filtered = helper.doFilterUser(user);
});
如何解决这个问题?
这里的问题是您仍然有一个符合 s 严格模式的猫鼬文档。如果您想更改该文档,则需要将其设为 "raw" 没有所有附加控件的对象:
User.findOne({_id: id}, function(err, user) {
var filtered = helper.doFilterUser(user.toObject());
});
因此此处的 .toObject()
方法将 return 原始形式的对象。这使您可以随心所欲地操作按键。
试试这个:
您可以通过猫鼬访问某些值。
User.findOne({_id: id}, 'firstName lastName email location picture', function(err, user){
console.log(user);
});
你只是在查询之后提到需要的字段。
希望对您有所帮助....
您也可以明确指示它不返回某些属性。如果您不想通过网络呈现散列密码,则很有用。查找方法如下所示:
User.find({}, '-id -__v',function(err,users){
})
或
User.findOne({_id: id}, '-id -__v',function(err,user){
})
我已经定义了一个架构
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 端点,其中包含所有用户的 return 列表。在该列表中,我想隐藏一些属性,即 passwordHash, resetPasswordToken, resetPasswordExpired
我定义了一个自定义过滤器函数,如下所示
var doFilterUser = function(user) {
_.omit(user, ['passwordHash', 'resetPasswordToken', 'resetPasswordExpired']);
user.id = user._id;
delete user._id;
delete user.__v;
return user;
};
_
是 lodash
当我检查我的 API 正在响应所有用户属性时
这个过滤器函数定义在通用辅助模块中,我这样调用它
User.findOne({_id: id}, function(err, user) {
var filtered = helper.doFilterUser(user);
});
如何解决这个问题?
这里的问题是您仍然有一个符合 s 严格模式的猫鼬文档。如果您想更改该文档,则需要将其设为 "raw" 没有所有附加控件的对象:
User.findOne({_id: id}, function(err, user) {
var filtered = helper.doFilterUser(user.toObject());
});
因此此处的 .toObject()
方法将 return 原始形式的对象。这使您可以随心所欲地操作按键。
试试这个: 您可以通过猫鼬访问某些值。
User.findOne({_id: id}, 'firstName lastName email location picture', function(err, user){
console.log(user);
});
你只是在查询之后提到需要的字段。
希望对您有所帮助....
您也可以明确指示它不返回某些属性。如果您不想通过网络呈现散列密码,则很有用。查找方法如下所示:
User.find({}, '-id -__v',function(err,users){
})
或
User.findOne({_id: id}, '-id -__v',function(err,user){
})