Javascript findOneAndUpdate Mongoose函数中的字符串文字问题

Javascript findOneAndUpdate Mongoose函数中的字符串文字问题,javascript,node.js,mongodb,mongodb-query,Javascript,Node.js,Mongodb,Mongodb Query,与此问题类似,我无法在findOneAndUpdate函数中获取字段变量。它将其作为文本字段。我试图实施他们的解决方案,但没有成功。我没有出错,只是没有更新任何东西 var cat = new Cat(); var field = (req.body[1].type); Cat.findOneAndUpdate({ 'sid': req.sessionID }, {$push: {field: req.body[0]}}, {'upsert': true, 'new': true}, fun

与此问题类似,我无法在findOneAndUpdate函数中获取字段变量。它将其作为文本字段。我试图实施他们的解决方案,但没有成功。我没有出错,只是没有更新任何东西

var cat = new Cat();

var field = (req.body[1].type);

Cat.findOneAndUpdate({ 'sid': req.sessionID }, {$push: {field: req.body[0]}}, {'upsert': true, 'new': true}, function (err, data){

要将对象属性的“键”设置为变量中的值,需要使用括号
[]
表示法:

var cat = new Cat();

// Just use it in the below assignment instead
//var field = (req.body[1].type);

var update = { "$push": { } };
update.$push[req.body[1].type] = req.body[0];

Cat.findOneAndUpdate(
    { 'sid': req.sessionID },
    update,                      // and reference in here
    {'upsert': true, 'new': true}, 
    function (err, data){

这就是如何在JavaScript中动态分配密钥。

好的,这非常有效。我的问题是这是如何工作的?为什么需要第一部分?为什么用引号?任何资源,你有或可以张贴将是伟大的。谢谢@Andrewthread Gill第一部分是什么?我所做的就是“注释掉”您的代码,这样您就可以看到您不需要的内容并添加正确的代码。这不是“引号”,也不是必需的,只是为了向您显示您不需要的内容。@AndrewThread Gill嗯,有必要进行预声明,因为您无法将属性分配给不存在的内容,因此需要在对象中已经定义了
$push
属性。例如,Python允许您只进行链定义,但JavaScript和其他不允许。至于“引号”,这只是一种习惯,因为序列化JSON需要在键名上加引号。另外,我希望人们能够为其他语言复制/粘贴。@AndrewThreadgill您可以不使用括号,例如:var update={$set:{};更新。$set[field]=newValue;