更新包含许多字段的文档

时间:2020-01-15 15:44:14

标签: node.js mongodb express

我在mongo db中有此文档

 { _id: 5e1f159e03ffa0f3c79e17ff,
    issue_title: 'test ',
    issue_text: 'tttttttttttttest',
    created_by: 'ahmad',
    created_on: 2020-01-15T13:37:32.119Z,
    updated_on: 2020-01-15T13:37:32.119Z,
    assigned_to: '',
    status_text: '',
    open: true }

我希望用户一次更新任意多个字段。

我不知道要在Advance中更新的字段数。

我想发送这样的查询updated_issue = { id: '_id', open:false, ...},因此,只有updated_issue中的字段会被修改。

我的代码如下:

...
 updated_issue = { id: '_id', open:false, ..}

...
 var keys = Object.keys(update_issue);

 db.collection(project).updateOne({_id:id}, 
     { for(var k  of keys) { $set: { k: update_issue[k]} } },  /* problem is this line */
     {new:true}, (err,data )=>{ 
                   res.tyep('text').send('success');
                   });
...

我想循环抛出一个对象,并将其值分配给数据库中的相应字段。无需修改其他字段

2 个答案:

答案 0 :(得分:0)

答案是用$set准备对象,然后更新文档。



...
 updated_issue = { id: '_id', open:false, ..}

...
 var keys = Object.keys(update_issue);
 cost tmp = {$set:{}}; for(var k of keys) { tmp.$set[k] = update_issue[k] }; 

 db.collection(project).updateOne({_id:id} , tmp , {new:true}, (err,data )=>{ 
                   res.tyep('text').send('success');
                   });
...



答案 1 :(得分:-1)

我相信您可以通过使用“ update_issue”代替 “ {for(var k of key of key){$ set:{k:update_issue [k]}}}}”,因为它是一个对象。

updated_issue = { id: "_id", open: false, ...};

var keys = Object.keys(update_issue);

db.collection(project).updateOne(
  { _id: id },
  update_issue ,
  { new: true },
  (err, data) => {
    res.tyep("text").send("success");
  }
);