首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在映射函数中动态评估级别

在映射函数中动态评估级别
EN

Stack Overflow用户
提问于 2021-07-17 15:43:25
回答 1查看 29关注 0票数 0

感谢 Rafael Freitas,这里是我对mongoDB的更新函数:

代码语言:javascript
复制
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,
      
    })

我只希望能够动态地评估查询的级别,而不是使用:

代码语言:javascript
复制
"cards.advanced.unit"

我可以用这个:

代码语言:javascript
复制
["cards." + level + ".unit"]

但当涉及到map内部的刺痛

代码语言:javascript
复制
$map: {
        input: "$cards.advanced", // I cannot use: ["$cards." + level]
...

那么我就不能只使用:["$cards." + level]

更新后的集合属性将意外地插入到数组中!!

如何在该level中动态定义map

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-17 15:52:07

只需去掉数组括号。

代码语言:javascript
复制
input: "$cards." + level

这只是字符串添加(将两个字符串相加在一起)。数组括号与导致字符串相加无关。这只是你在另一种情况下需要的东西。

例如,您可以将两个字符串相加在一起,然后创建一个具有组合结果的新字符串:

代码语言:javascript
复制
let x = "two";

let result = "one, " + x;

console.log(result);

如果方括号位于object属性声明的左侧,则需要方括号。这将被称为计算属性名称,是Javascript特性,它允许将Javascript表达式用于属性声明的左侧。括号允许在语言中通常不允许表达式的特定位置使用Javascript表达式。表达式总是允许在右边为属性值设置had,因此这里不使用括号。如果在右侧使用它们,它将声明一个数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68422001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档