mongoose使用后备更新多个条件

时间:2016-12-28 16:47:04

标签: node.js mongodb express mongoose

我希望只有一个端点可以做两件事来简化前端工作。此端点可以更新年龄和等级,其中一个可以是可选的。如果没有年龄或成绩,下面的代码将失败。如何解决这个问题?

//update age and grade
app.put('/user', function(req, res) {
  var date = req.body.date,
  userId = req.body.userId,
  age = req.body.age,
  grade = req.body.grade;

  Trucks.update({'date':date, 'id': userId}, {'$set': {
    'userData.$.age': age,
    'userData.$.grade': grade
  }}, function(err, response){
    if (err) {
        console.log(err)
        return res.status(500).json({
            error: 'Error update update user\'s data'
        });
    }else{
        res.send(response);
    }
  })
});

我可以在更新对象中添加条件吗?

{
    age ? "'userData.$.age': age", : ''
    grade ? "'userData.$.grade' : grade" : ''
}

嗯不这么认为..

1 个答案:

答案 0 :(得分:1)

例如,您可以在发送到mongoose之前准备查询。

//update age and grade
app.put('/user', function(req, res) {
  var date = req.body.date,
  userId = req.body.userId,
  age = req.body.age,
  grade = req.body.grade;

  var query = {};

  if(age){
    query['userData.$.age']= age;
  }

  if(grade){
    query['userData.$.grade']= grade;
  }

  Trucks.update({'date':date, 'id': userId}, {'$set': query}, function(err, response){
    if (err) {
        console.log(err)
        return res.status(500).json({
            error: 'Error update update user\'s data'
        });
    }else{
        res.send(response);
    }
  })
});