使用变量访问 MongoDB 嵌套对象
Access MongoDB nested object using variables
使用 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 }
}
}
]
}
我有哪些选择?
您可以预先创建查询,这样就可以使用括号符号作为键
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();
});
});
使用 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 }
}
}
]
}
我有哪些选择?
您可以预先创建查询,这样就可以使用括号符号作为键
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();
});
});