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

Javascript 如何在更新查询的键内使用变量,javascript,node.js,mongodb,object,backend,Javascript,Node.js,Mongodb,Object,Backend,我用两个硬编码索引(0和0在$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)

我用两个硬编码索引(0和0在
$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中似乎无法使用多个位置运算符。 非常感谢。

你可以试试

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

结论在查询中,不能使用多个
$
位置运算符,但可以同时使用单个位置运算符和

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

[portfolio.index1.nodes.index2.node\u name]:req.body.node\u name
非常感谢!对我来说,位置运算符和阵列过滤器是最好的解决方案。工作!:)