更新返回错误的响应

时间:2018-05-10 18:00:12

标签: javascript node.js mongodb mongoose

我在开发人员字段中有以下项目文档。我想推送从mySQL查询返回的多个记录。

/* project document */
{
    "_id" : ObjectId("5ad77d2ccec38c21b8cbea0b"),
    "description" : "blah blah blah",    
    "startDate" : null,
    "completedOn" : null,
    "lastStatusOn" : null,
    "status" : "Unassigned",
    "devTime" : "00:00:00.0000000",
    "devLevel" : "Basic",
    "estDevTime" : "00:00:00.0000000",
    "developers" : [],
    "notes" : [],
    "__v" : 3
}

我从mySQL获得以下数据。

[ RowDataPacket { userid: 'jd1234', fullName: 'Joh Doe' },
  RowDataPacket { userid: 'jd5678', fullName: 'Jane Doe' } ]

我想将这些数据推送到项目文档中的developers数组中。

期望的结果:

/* project document */
{
    "_id" : ObjectId("5ad77d2ccec38c21b8cbea0b"),
    "name" : "shopping cart",
    "description" : "blah blah blah",    
    "startDate" : null,
    "completedOn" : null,
    "lastStatusOn" : null,
    "status" : "Unassigned",
    "devTime" : "00:00:00.0000000",
    "devLevel" : "High",
    "estDevTime" : "00:00:00.0000000",
    "developers" : [
        { userid: 'jd1234', fullName: 'Joh Doe' },
        { userid: 'jd5678', fullName: 'Jane Doe' }
    ],
    "notes" : [],
    "__v" : 3
}

我有以下代码。我没有错误,但开发人员没有插入。

router.post('/saveDeveloper', async (req, res) => {
  let userList = req.body.attuid,
      users = userList.split(',').map(attuid => `'${attuid.trim()}'`).join(',');


  mySQLdb.connect();
  let sql = `SELECT userid, fullName FROM users WHERE userid IN (${users})`;

  mySQLdb.query(sql, function (err, results) {
    if (err) throw err;
    console.log(results);

    Project.update(
      {_id: req.body.projectID},
      {"$push": {
        "developers": {"$each": results}
        }
      }
    );

    res.json(results);    
  });

  mySQLdb.end();

});

我错过了什么?提前谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这是因为您要返回第一个查询的结果sqlresultssql查询返回的数组,您将发送该数据作为响应。

如果你想发送更新的结果,你必须在更新集合后得到的结果的响应中发送;你会在.update(..的回调函数中得到更新的结果。 / p>

此外,您必须处理数据results以将其转换为json,因此您可以添加这些步骤来操纵results

var string=JSON.stringify(results);
var json =  JSON.parse(string);
Project.update(
  {_id: req.body.projectID},
  {"$push": {
    "developers": {"$each": json }
    }
  },function(err,resp){

    res.json(resp)
  }
);