感谢 Rafael Freitas,这里是我对mongoDB的更新函数:
const updated = await db.Mother.update({
"cards.advanced.unit": card.unit
},
[
{
$set: {
"cards.advanced": {
$map: {
input: "$cards.advanced", // I cannot use: ["$cards." + level]
as: "adv",
in: {
_id: "$$adv._id",
unit: "$$adv.unit",
cards: {
$map: {
input: "$$adv.cards",
as: "advcard",
in: {
$cond: [
{
$eq: [
"$$advcard.id",
cardID
]
},
{
type: "this is a NEW updated card",
id: "$$advcard.id"
},
"$$advcard"
]
}
}
}
}
}
}
}
}
],
{
new: true,
})我只希望能够动态地评估查询的级别,而不是使用:
"cards.advanced.unit"我可以用这个:
["cards." + level + ".unit"]但当涉及到map内部的刺痛
$map: {
input: "$cards.advanced", // I cannot use: ["$cards." + level]
...那么我就不能只使用:["$cards." + level]
更新后的集合属性将意外地插入到数组中!!
如何在该level中动态定义map
发布于 2021-07-17 15:52:07
只需去掉数组括号。
input: "$cards." + level这只是字符串添加(将两个字符串相加在一起)。数组括号与导致字符串相加无关。这只是你在另一种情况下需要的东西。
例如,您可以将两个字符串相加在一起,然后创建一个具有组合结果的新字符串:
let x = "two";
let result = "one, " + x;
console.log(result);
如果方括号位于object属性声明的左侧,则需要方括号。这将被称为计算属性名称,是Javascript特性,它允许将Javascript表达式用于属性声明的左侧。括号允许在语言中通常不允许表达式的特定位置使用Javascript表达式。表达式总是允许在右边为属性值设置had,因此这里不使用括号。如果在右侧使用它们,它将声明一个数组。
https://stackoverflow.com/questions/68422001
复制相似问题