Javascript 使用变量访问MongoDB嵌套对象
使用npm包mongojs,我需要使用变量访问嵌套对象。但是,以下情况不起作用:Javascript 使用变量访问MongoDB嵌套对象,javascript,node.js,mongodb,ecmascript-6,mongojs,Javascript,Node.js,Mongodb,Ecmascript 6,Mongojs,使用npm包mongojs,我需要使用变量访问嵌套对象。但是,以下情况不起作用: let userID = req.user._id, marketName = req.body.marketName, itemName = req.body.item.itemName, crossOff = req.body.item.isCrossed; markets.updateOne( { _id: use
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();
});
});
由于在这种情况下不能使用模板字符串,因此出现了意外的模板字符串
错误。我知道可以使用括号表示法将变量用作键,但是,这对我的情况没有帮助,因为我无法将整个键作为字符串存储在变量中。
为了提供帮助,以下是文档结构的示例:
{
_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 }
}
}
]
}
我的选项是什么?您可以提前创建查询,这样可以对键使用括号表示法
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();
});
});
为什么不能创建一个对象并使用括号作为键?模板字符串只是语法上的糖,如果你能使用它们,你可以使用一个对象。@adeneo我事先不知道marketName的位置是什么。否则我只会使用括号符号,就像->一样,我会被诅咒的。谢谢@adeneo我不知道我可以用这种方式设置查询。不客气,我也添加了它作为答案。