【问题标题】:Update of object in MongoDB with node.js使用 node.js 更新 MongoDB 中的对象
【发布时间】:2017-05-23 00:45:44
【问题描述】:

所以我在 server.js 文件中定义了一个 db 模型,它将用于 POST :

var department = mongoose.model('department', {
  departmentName: String,
  rooms: [{
    roomNumber: String,
    width: Number,
    height: Number,
    posX: Number,
    posY: Number,
    sanitary: Boolean,
    childcareArea: Boolean,
    lounge: Boolean,
    patient: {
      patientnr: Number,
      firstname: String,
      lastname: String,
      reasonOfHospitalization: String,
      dateOfHospitalization: String,
      expectedDateOfDischarge: String,
      vegetarian: Boolean,
      needsHelp: Boolean,
      comments: String,
      department: String,
      roomNumber: String,
      nextTreatment: {
        type: String,
        shortDescription: String,
        timestamp: String
      }
    }
  }]
});

现在我想要实现的是我的 post call 更新了患者对象。

 public postPatient(patient: Patient) {
    var headers = new Headers();
    headers.append('Content-Type', 'application/json; charset=utf-/8');

    let url ='http://localhost:8080/api/departments/patients/' + patient.patientnr;

    this.http.post(url, JSON.stringify(patient), headers)
      .map(res => res.json());
  }

这就是我处理帖子的方式,但它不会更新我的数据库中的任何内容...

app.post('/api/departments/patients/:id', function(req, res) {
  var patient = req.body.patient;

  department.findOneAndUpdate(
    { "rooms.patient.patientnr": parseInt(req.params.id) },
    {
      "rooms": {
        "$elemMatch": {
          "patient.patientnr": parseInt(req.params.id)
        }
      }
    }, {
      "$set": {
        "rooms.patient": patient
      }
    }, {
     new : true
    },
    function (err, dept) {
      if (err){
        console.log(err.stack);
        return res.send(err);
      }
      return res.json({
        data: department,
        status: 'success'
      });
    });
});

【问题讨论】:

    标签: node.js mongodb angular mongoose


    【解决方案1】:

    这样的东西应该适合你。查找并替换所选房间的患者。

    department.findOneAndUpdate(
        { "rooms.patient.patientnr": parseInt(req.params.id) },
        { "$set": {"rooms.$.patient": patient}},
        {new : true}
        ....
    )
    

    【讨论】:

    • 谢谢 :) 我只收到一条错误消息,说我的时间戳无法转换为字符串,但我会修复它。
    • 非常感谢您的帮助!
    • 你知道我为什么会收到这个错误吗:MongooseError: Cast to string failed for value "{ timestamp: '2017-01-12T05:09', Only fault left...
    猜你喜欢
    • 2016-04-19
    • 2014-10-31
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2018-01-31
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多