使用选择选项

时间:2017-08-31 07:20:36

标签: node.js mongodb mongoose

根据文档,必须可以将选择选项添加到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我想的字段,所以在我看来,这不再重复了。

0 个答案:

没有答案