【问题标题】:How to use variables inside the key of an update query如何在更新查询的键中使用变量
【发布时间】:2020-11-25 11:57:23
【问题描述】:

我正在通过两个硬编码索引($set 中的 0 和 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.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 中使用多个位置运算符。 非常感谢。

【问题讨论】:

  • [portfolio.index1.nodes.index2.node_name]: req.body.node_name

标签: javascript node.js mongodb object backend


【解决方案1】:

你可以试试,

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

Playground

【讨论】:

  • 非常感谢!位置运算符和 arrayFilters 对我来说是最好的解决方案。作品! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2020-09-19
  • 2017-10-17
  • 2012-01-22
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
相关资源
最近更新 更多