我有一个Node / Express / Mongoose API,其中有一个函数可以根据传递给它的ID和Type参数处理对文档的多次更新。
三个参数是: 类型:基本上是文档中的目标字段(即“ linkedin”,“ facebook” ...) id:我要更新的文档字段的ID 项目:我要推送到更新中的值。
我要做的第一件事是为查询创建一些常量:
const sharedType = 'shared.' + type + '.item';
const sharedTypeId = 'shared.' + type + '._id'
const rootType = type + '.item';
const rootTypeId = type + '._id'
因此,例如,我将传入:rootTypeId:'linkedin'来设置linkedin的查询参数,这将产生一个常量'linkedin._id',它将填充以下内容:
Cards.update({ rootTypeId :id},{$ set:{rootType:item}},{'multi':true}, 功能(错误,卡片){ 错误=== null吗? console.log('没有错误'+类型+'已为卡更新'):console.log('Error:',err); } )
然后我有另一个用于rootType的const,对于linkedin,它最终将是'linkedin.name'来定位项目字段。
我的问题是这个...
如果我将这样的代码硬编码:Cards.update({'linkedin._id':id},{$ set:{
有效。
但是使用常量不会,尽管它们的结果应该是相同的参数。
我在这里做什么错了?
谢谢!
答案 0 :(得分:1)
尝试一下:
Cards.update({ [rootTypeId]: id }, { $set: { [rootType]: item } }, { 'multi': true }, function (err, card) { err === null ? console.log('No errors ' + type + ' updated for cards') : console.log('Error: ', err); } )
基本上,rootTypeId和rootType应该放在方括号中,以便这些变量中的值成为查询对象中的键