使用npm包mongojs,我需要使用变量访问嵌套对象。但是,以下内容不起作用:
let userID = req.user._id,
marketName = req.body.marketName,
itemName = req.body.item.itemName,
crossOff = req.body.item.isCrossed;
markets.updateOne(
{
_id: userID,
"marketList.marketName": marketName
},
{$set : {`marketList.$.shoppingList.${itemName}.isCrossed`: crossOff}},
(err, doc) => {
if(err) { res.status(400).send('Bad Request') }
else { res.status(204) }
res.end();
});
});
由于在这种情况下无法使用模板字符串,因此unexpected template string
错误
我知道可以使用括号表示法将变量用作键,但是,这对我的情况没有帮助,因为我无法将整个键存储在其中的变量设置为字符串。
为了提供帮助,以下是文档结构的示例:
{
_id: ObjectId(...),
marketList: [
{ marketName: 'ralphs',
shoppingList: {
"cookies": { itemName: "cookies", isCrossed: false },
"moar cookies": { itemName: "moar cookies", isCrossed: true }
},
{
marketName: 'gelsons',
shoppingList: {
"even moar cookies": { itemName: "even moar cookies", isCrossed: true }
}
}
]
}
我有什么选择?
答案 0 :(得分:0)
您可以提前创建查询,这样括号表示法可用于键
let userID = req.user._id,
marketName = req.body.marketName,
itemName = req.body.item.itemName,
crossOff = req.body.item.isCrossed,
query = {};
query["marketList.$.shoppingList." + itemName + ".isCrossed"] = crossOff;
markets.updateOne({
_id: userID,
"marketList.marketName": marketName
}, {
$set: query
}, (err, doc) => {
if (err) {
res.status(400).send('Bad Request');
} else {
res.status(204);
}
res.end();
});
});