更新mongodb中的嵌套值

时间:2018-06-13 19:19:19

标签: javascript node.js mongodb mongoose

根据我下面的代码,我希望将变量设置为req.body.update。我无法弄清楚如何实现这一目标。当我将它设置为queryz时,没有任何反应。

我正在使用猫鼬。

app.put('/application/todoupdate/:id/:index', function(req, res, next) {
    console.log('accessed put route');
    let item = 0;
    let queryz = "todos." + item + ".todoText";
    console.log(queryz);
    User.where({_id: req.params.id}).update({
      $set: {
        "todos.0.todoText": req.body.update
        // queryz: req.body.update
      }
    }).then(
      res.send(req.body.update)
    )
  });

我的数据库结构是:

{
"_id": {
    "$oid": "77777777777"
},
"todos": [
    {
        "todoText": "req success",
        "timestamp": "7777777777777"
    },
    {
        "todoText": "something",
        "timestamp": "7777777777777"
    }
]
}

我得到的是允许我访问较低级别的内容:

app.put('/application/todoupdate/:id/:timestamp', function(req, res, next) {
    console.log('accessed put route');
    User.where({_id: req.params.id, "todos.timestamp": 
req.params.timestamp}).update({
      $set: {
        "todos.$.todoText": req.body.update
      }
    }).then(
      res.send(req.body.update)
    )
  });

1 个答案:

答案 0 :(得分:0)

您需要使用positional运算符来更新嵌套的对象数组

User.update(
    { _id: req.params.id }, 
    { "$set": { "todos.$.todoText": "hello" } }
)

如果您想更新数组中的所有对象,则可以使用$[] positional operator

User.update(
    { _id: req.params.id }, 
    { "$set": { "todos.$[].todoText": "hello" } }
)