Model.update无法处理Mongoose

时间:2017-06-03 10:35:15

标签: mongodb mongoose

我的数据如下:

{
"profileID": "123",
"fullname": "Name",
"notifications": [
  {
    "read": false,
    "date": "2017-05-06 13:40:01",
    "post": "5555555",
    "action": "commented",
    "profileID": "456"
  },
  {
    "read": false,
    "date": "2017-05-06 13:40:15",
    "post": "5555555",
    "action": "commented",
    "profileID": "456"
  }
]}

我正在尝试创建一个Node API路由,以便能够更新每个通知。对于唯一性,可以使用日期变量。

总结一下:

  • profileID
  • 查找用户
  • 获取他/她的通知
  • 更新与日期匹配的通知的读取值。

我已按以下方式构建它:

apiRouter.post('/api/changeNotificationStatus', function(req, res){

        userModel.update(
            {profileID: req.body. profileID, "notifications.date": req.body.date, "notifications.post": req.body.post, "notifications.action": req.body.action},
            {$set:{"notifications.$.read": true}},
            {multi: false},

            function(err, data) {
                if (err){
                    console.log(err);
                } else {
                    console.log(data);
                }
            });

    });

没有任何错误,但我得到以下内容:

{ n: 0, nModified: 0, ok: 1 }

我已经确认变量:req.body.profileID,req.body.date,req.body.date,req.body.post和req.body.action正好通过。

我做错了吗?

PS:感谢Neil Lunn指点我的model.update帖子!

1 个答案:

答案 0 :(得分:0)

只是为了帮助遇到这种情况的人,有很多问题:

1)userModel的架构是错误的,因为它应该是:

notifications:   [{
   read: Boolean,
   date: Date,
   post: String,
   action: String,
   profileID: String
}]

而不是:

notifications:   [{ }]

2)在userModel.update命令中,我应该完成:

new Date(req.body.date)

而不是:

req.body.date

希望这有助于将来。