【发布时间】:2017-02-22 10:26:21
【问题描述】:
我有一个 mongoose 架构,并且我设法执行 FindOneAndUpate 查询没有问题。但要这样做,我必须提供所有字段才能仅更新几个数组中的 1 个中的 1 个对象,这非常不方便。
我尝试使用 $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": "ready"
{
"fondos": [
{
"contorno": [
"Extra Tocineta",
"Champiñon"
],
"estadoitem": "ready",
"fondo": "Pizza Americana"
}]
}
最初是“estadoitem”:“未准备好”,但就像我说的那样,什么都没有发生,所以如果我能得到一些帮助,我将不胜感激。再次感谢。
编辑:我还想知道是否可以使用类似 $set 的内容更新“estadoitem”字段:[orden.fondos.estadoitem]。我对架构中的每个项目都有一个 ID,因此我可以通过某种方式访问它以获取确切的项目
最终更新--------
我所需要的接受的答案是一种动态设置 $set 的方法
按照Passing parameters to the array updater method {$set: {"parameters": data}} 来实现这一目标
【问题讨论】:
标签: javascript node.js mongodb mongoose