更新/创建数组中的子文档

时间:2017-01-31 15:48:32

标签: arrays node.js mongodb mongoose subdocument

我在MongoDB数据库的用户集中得到了这样的数据

{
    "_id" : ObjectId("5890a9598c36d45435d521c7"),
    "name" : "Test Testsson",
    "email": "test@test.com,"
    "tasks": [{
            "_id" : ObjectId("5890a9598c36d45435d521ce"),
            "sessionid" : 0,
            "value" : 7,
            "actions" : [ 
                {
                    "taskid" : 17,
                    "time" : 0.85302734375,
                    "_id" : ObjectId("5890a9598c36d45435d521d6")
                }, 
                {
                    "taskid" : 5,
                    "time" : 1.39321899414063,
                    "_id" : ObjectId("5890a9598c36d45435d521d5")
                }
            ]
        }, {
            "_id" : ObjectId("5890a9598c36d45435d521qw"),
            "sessionid" : 1,
            "value" : 7,
            "actions" : [ 
                {
                    "taskid" : 1,
                    "time" : 0.85302734375,
                    "_id" : ObjectId("5890a9598c36d45435d521zx")
                }, 
                {
                    "taskid" : 5,
                    "time" : 1.39321899414063,
                    "_id" : ObjectId("5890a9598c36d45435d521yt")
                }
            ]
        }
    ]
}

我将数据发布到我的节点/ mongoose应用程序,我想更新任务数组。

我对/ api / user / task / 5890a9598c36d45435d521c7发帖 身体:

{
    "sessionid" : 2,
    "value" : 12,
    "actions" : [ 
        {
            "taskid" : 4,
            "time" : 0.85302734375,
            "_id" : ObjectId("5890a9598c36d45435d521zx")
        }, 
        {
            "taskid" : 9,
            "time" : 1.39321899414063,
            "_id" : ObjectId("5890a9598c36d45435d521yt")
        }
    ]
}

我可以使用此查询找到我的任务:

User.findOne({
    _id: ObjectId('58909be40c50e2d0345e916e'),
    "tasks.sessionid": 0},
    function(...){/* blah blah */});

但是如何更新任务数组中的数据?

  • 如果sessionid存在,我想用。更新子文档 请求正文(假定用户存在)
  • 如果sessionid存在,我想从中创建一个新对象 请求body在tasks数组中(假定User存在)
  • 如果url参数DONT中的User的ObjectId存在,则发送http 状态:500

我尝试使用update和findAndModify,但无法按预期工作。任何人都有任何想法如何做到这一点。

0 个答案:

没有答案