【问题标题】:Update nested values in mongodb [duplicate]更新mongodb中的嵌套值[重复]
【发布时间】:2018-11-23 11:29:06
【问题描述】:

根据下面的代码,我希望为 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)
    )
  });

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 那么我该如何在其中放置一个变量呢?我没有问题具体说明我要更新的内容,但是如果我像在参数中所做的那样传递索引,我该如何将它作为位置。
    • 你让我走了 90% 的路,谢谢伙计!
    猜你喜欢
    • 2018-11-07
    • 2017-01-13
    • 2017-09-12
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多