根据文档,必须可以将选择选项添加到mongoose中的findByIdAndUpdate
函数。
http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate
但是,它看起来不起作用。
我想要的是什么:
我正在使用Facebook API选项构建应用程序。所以,我保存了从Facebook获得的令牌,但我不希望它在前端可用,所以我在我的模型上选择选择为假。
换句话说,真正的模型看起来像:
user: {
name: String,
//some other fields
facebook: {
token: {
type: String,
select: false
},
profileId: String
postTo: {
type: String,
enum: ['wall', 'page']
}
//some other fields
}
}
在我的前端,模型看起来像:
user: {
name: "Test user",
facebook: {
profileId: "123456789"
postTo: "wall"
}
}
属性' postTo
'可以改变,当然我希望它得到保存。所以,我使用了mongoose的findByIdAndUpdate()
函数来存档它。但是,我认为,由于select: false
,当我使用上面给定的模型运行this函数时,属性标记被完全删除。
如何在不丢失数据的情况下运行此功能?
我没有得到任何错误或其他什么。
User.findByIdAndUpdate(req.body.user._id, {$set: updatedUser}, {new: true}).select('facebook.token').exec(function (err, user) {
log.user("USER", user); //has lost his token
})
我已尝试过此问题的代码(可能重复):Mongoose select fields to return from findOneAndUpdate 但这似乎不起作用。我已经将代码更新为:
User.findByIdAndUpdate(
{_id: req.body.user._id},
{$set: updatedUser},
{
"fields": {
"facebook.token":1,
},
"new": true
}).exec(function (err, user) {
})
问题不在于select:false
我想的字段,所以在我看来,这不再重复了。