我在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,但无法按预期工作 . 任何人都有任何想法如何做到这一点 .