我正在使用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'
如何动态生成我的姓名字段?
答案 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.