如何在更新查询的键中使用变量

我正在通过两个硬编码索引(0 和 0 in)更新文档$set,它工作得很好。


var result = db.collection('users', function (err, update_node) {

  update_node

    .updateOne(

      {

        _id: ObjectID(req.body.userid),

        "portfolio.nodes.node_id": ObjectID(req.body.nodeid)

      },

      {

        $set: {

          "portfolio.0.nodes.0.node_name": req.body.node_name

        }

      }

    )

    .then(function (doc) {

      res.send(doc);

    });

});

如何在 $set 中使用 index1 和 index2?


const index1 = 0;

const index2 = 0;


var result = db.collection('users', function (err, update_node) {

  update_node

    .updateOne(

      {

        _id: ObjectID(req.body.userid),

        "portfolio.nodes.node_id": ObjectID(req.body.nodeid)

      },

      {

        $set: {

          'portfolio.index1.nodes.index2.node_name': req.body.node_name

        }

      }

    )

    .then(function (doc) {

      res.send(doc);

    });

});

我还尝试了位置运算符:


'portfolio.$.nodes.$.node_name': req.body.node_name

但是看起来没有办法在 MongoDB 中使用多个位置运算符。太感谢了。


慕丝7291255
浏览 125回答 1
1回答

德玛西亚99

你可以试试,let index1 = 0;let index2 = 0;let set = {  ["portfolio."+index1+".nodes."+index2+".node_name"]: req.body.node_name};update_node.updateOne(  {    _id: ObjectID(req.body.userid),    "portfolio.nodes.node_id": ObjectID(req.body.nodeid)  },  { $set: set }).then(function (doc) { res.send(doc); });关于您的查询的结论,您不能使用多个$位置运算符,但可以同时使用单个位置运算符和arrayFilters ,update_node.update(  {    _id: ObjectID(req.body.userid),    "portfolio.nodes.node_id": ObjectID(req.body.nodeid)  },  {    $set: {      "portfolio.$.nodes.$[n].node_name": req.body.node_name    }  },  {    arrayFilters: [      { "n.node_id": ObjectID(req.body.nodeid) }    ]  }).then(function (doc) { res.send(doc); });操场
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript