Javascript 如何在更新查询的键内使用变量
我用两个硬编码索引(0和0在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)
$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
非常感谢!对我来说,位置运算符和阵列过滤器是最好的解决方案。工作!:)