我正在尝试更新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