为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2023-06-15 16:20:14
我正在通过两个硬编码索引(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 中使用多个位置运算符。太感谢了。
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

你可以试试,


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); });

操场


查看完整回答
反对 回复 2023-06-15
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号