使用mongo生成动态字段(无聚合)

时间:2018-07-13 09:31:00

标签: node.js mongodb typescript

我正在使用updateOne()查询来更新数据库中的某些内容。

根据函数返回的值,我将更新另一个字段。因此,我尝试动态生成字段,以避免多次编写相同的函数。

我的想法是通过以下方式将字段存储在模板字符串中:

const expField: string = `teams.${newEvent.data.team}.${newEvent.data.position}`;

然后我用它创建查询:

query = {
        $push: {
          evtsGame: newEvent
        },
        $set: {
          expField: goalValue.exp,
          updatedAt: moment().toISOString()
        },
        $inc: {
          scoreField: goalValue.score
        }
      };

但是在测试查询后,我意识到它创建了一个新字段'expField'而不是类似'teams.team1.attacker'

的字段。

如何动态生成我的姓名字段?

3 个答案:

答案 0 :(得分:1)

感谢@Sergio Tulentsev帮助我解决了问题,以下是解决方法:

Pair<List<A>, List<B>>

答案 1 :(得分:0)

您需要强制将expField解释为值而不是名称。不确定对象文字语法是否可行,但是您始终可以执行以下操作:

query = {
  $push: {
    evtsGame: newEvent
  },
  $set: {
    updatedAt: moment().toISOString()
  },
  $inc: {
    scoreField: goalValue.score
  }
};

query['$set'][expField] = goalValue.exp;

答案 2 :(得分:0)

这样做

 $set: {
          expField: goalValue.exp,
        }

在数据库中, dbEngine 假定expField中有一个已归档的 collection ,然后它分配了有价值。

尝试此解决方案,也许有帮助:

query = {
        $push: {
          evtsGame: newEvent
        },
        $set: {
          updatedAt: moment().toISOString()
        },
        $inc: {
          scoreField: goalValue.score
        }
      };
query['$set'][evtsGame]=goalValue.exp; // Change Here, It will be dynamic.
相关问题