我在MongoDB数据库的User集合中得到了这样的数据

{
    "_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应用程序,我想更新任务数组 .

我用/ Body对/ api / user / task / 5890a9598c36d45435d521c7进行了POST:

{
    "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 DONT存在,我想从tasks数组中的请求主体创建一个新对象(假设User存在)

  • 如果url参数DONT中的User的ObjectId存在,则发送http status:500

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