猫鼬更新值在数组内

时间:2018-08-12 14:50:20

标签: node.js mongoose

我正在尝试更新comments(kommentit)数组内的值。我可以定位特定的注释并更新值,但是当有多个注释时,它将用更新的注释覆盖所有其他注释。

router.post('/:id/kommentit/:idcomments/reply', function(req, res, next) {
  Restaurant.findOneAndUpdate({
    _id: req.params.id
  }, {
    '$set': {
      'kommentit': req.body
    }
  }, {
    new: true
  }, function(err, comment) {
    res.redirect('/ravintolat');
  });
});

我也尝试了没有{new:true}的情况。什么也没做我的更新HTML看起来像这样:

<form action="/ravintolat/<%= ravintolat._id%>/kommentit/<%= ravintolat.kommentit[i]._id %>/reply" method="POST">
  <input type="text" name="id" placeholder="Otsikko" value="<%= ravintolat.kommentit[i]._id%>">
  <input type="hidden" name="otsikko" placeholder="Otsikko" value="<%= ravintolat.kommentit[i].otsikko%>">
  <input type="hidden" name="arvosana" placeholder="Arvosana 1-5" value="<%= ravintolat.kommentit[i].arvosana%>">
  <input type="hidden" name="arvio" placeholder="Kirjoita lyhyt arvio käynnistäsi" value="<%= ravintolat.kommentit[i].arvio%>">
  <input type="hidden" name="lahettaja" placeholder="Nimimerkki" value="<%= ravintolat.kommentit[i].lahettaja%>">
  <input type="text" name="ravintolanvastaus" placeholder="Otsikko">
  <button class="button small" type="submit">Vastaa</button>
</form>

第一个输入字段对我来说只是检查注释ID是否正确。

我的模式:

var RestaurantSchema = new Schema({
    nimi: {
        type: String,
        required: [true, 'Nimi on pakollinen!']
    },
    osoite: {
        type: String,
        required: [true, 'Osoite on pakollinen!']
    },
    kaupunki: {
        type: String,
        required: [true, 'Kaupunki on pakollinen!']
    },
    puh: {
        type: String
    },
    arvosana: {
            type: Number,
            default: 0
    },
    kommentit: [{
        otsikko: {
            type: String,
            required: [true, 'Otsikko on pakollinen!']
        },
        arvosana: {
            type: Number,
            required: [true, 'Arvosana on pakollinen!'],
            min: [0, 'Yksi on pienin arvosana!'],
            max: 5
        },
        arvio: {
            type: String,
            required: [true, 'Arvio on pakollinen!']
        },
        lahettaja: {
            type: String,
            required: [true, 'Lähettäjä on pakollinen!']
        },
        ravintolanvastaus: {
            type: String,
            default: ""
        }
    }]

}, {collection: 'ravintolat'});

发表评论后,我想更新的值是“ kommentit”数组中的“ ravintolanvastaus”。

尝试更新ravintolanvastaus字段后

req.body console.log:

{ id: '5b70708d7d87da5058e422a6',
  otsikko: 'Another test comment',
  arvosana: '5',
  arvio: 'Very cool',
  lahettaja: 'Test User',
  ravintolanvastaus: 'Nice ' }

它确实获得了正确的注释ID号,并将其值分配给字段ravintolanvastaus

0 个答案:

没有答案