У меня есть схема mongoose, и мне удается выполнить запрос FindOneAndUpate без проблем. Но для этого я должен предоставить все поля, чтобы обновить только один объект в 1 из нескольких массивов, что очень неудобно.Обновление массива subfield mongoose
Я попытался использовать $ set, но кажется неэффективным. Я отправляю код и надеюсь получить помощь. Заранее спасибо.
var comandaSchema = mongoose.Schema({
mesa: {type: Object},
fechaorden: {type: Date, default: Date.now},
orden: [{
postres: [{
idapoyo:idapoyoSchema,
postre:String,
estadoitem: String,
contorno:[]
}],
bebidas: [{
idapoyo:idapoyoSchema,
bebida:String,
estadoitem: String,
contorno:[]
}],
fondos: [{
idapoyo:idapoyoSchema,
fondo:String,
estadoitem: String,
contorno:[]
}],
entradas: [{
idapoyo:idapoyoSchema,
entrada:String,
estadoitem: String,
contorno:[]
}]
}],
estado_orden: {type: String},
estado_bebida: {type: String},
estado_pcuenta: {type: String},
estado_pago: {type: String}
});
var Comanda = module.exports = mongoose.model('Comanda', comandaSchema);
и моя функция обновления:
app.put('/api/estadofondo/:_id', function(req, res){
var id = req.params._id;
var comanda = req.body;
Comanda.findOneAndUpdate(id, {"$set": ["orden.fondos"] }, {}, function(err, comanda){
if(err){
throw err;
}
res.json(comanda);
});
});
Я посылаю это JSON, чтобы обновить "estadoitem": "готов"
{
"fondos": [
{
"contorno": [
"Extra Tocineta",
"Champiñon"
],
"estadoitem": "ready",
"fondo": "Pizza Americana"
}]
}
, который первоначально "estadoitem": «не готово ", но, как я сказал, ничего не происходит, поэтому я был бы признателен, если бы я мог получить некоторую помощь. Опять же, спасибо.
EDIT: Мне также интересно, могу ли я обновить только поле «estadoitem» с чем-то вроде $ set: [orden.fondos.estadoitem]. У меня есть идентификатор для каждого отдельного элемента в схеме, так что я мог каким-то образом получить доступ, что, чтобы добраться до точного пункта
FINAL UPDATE --------
acceted ответ работает все, что мне было нужно способ динамично установить $ установить
следовать этому Passing parameters to the array updater method {$set: {"parameters": data}}, чтобы добиться того, что
привет спасибо за ответ, с {"$ set": {orden.0.fondos: 'объект со значениями}}, измененный на {"$ set" : orden.0.fondos: '"estadoitem": "ready"'} im получение sintax error, и я вроде не под стоять то, что 0 для в orden.0.fondos, ум разработать немного больше? Еще раз спасибо, отредактируйте: в скобках параметров это «безопасно» или «сохранить» –
ok получил обновление с '{" $ set ": {" orden.0.fondos ": [comanda]}}' im, делая то, что я нужно, но у меня есть 3 набора данных, сохраненных в «фондах», и он удаляет другие 2, im отправляет этот json: '' contorno ': [ «Extra Tocineta», «Champiñon» ], «estadoitem»: «listo», «fondo»: «Pizza Americana», и я бы хотел только отправить «estadoitem» определенному элементу –
получил обновление с '{" $ set ": {" orden.0.fondos.1. estadoitem ": estadoitem}}' im, способный изменить очень специфическое поле, но делает мое поле объектом, и мне нужно оставаться простой строкой .. что я делаю неправильно? im отправляет этот json { "estadoitem": "listo" } –