update node.js mongodb mongoose

node.js - update - mongoose virtual



Mongoose, actualiza los valores en una matriz de objetos (5)

¿Hay alguna manera de actualizar los valores en un objeto?

{ _id: 1, name: ''John Smith'', items: [{ id: 1, name: ''item 1'', value: ''one'' },{ id: 2, name: ''item 2'', value: ''two'' }] }

Digamos que quiero actualizar el nombre y los elementos de valor para el elemento donde id = 2;

He intentado el siguiente w / mangosta:

var update = {name: ''updated item2'', value: ''two updated''}; Person.update({''items.id'': 2}, {''$set'': {''items.$'': update}}, function(err) { ...

El problema con este enfoque es que actualiza / establece el objeto completo, por lo tanto, en este caso, pierdo el campo de identificación.

¿Hay alguna manera mejor de mangosta de establecer ciertos valores en una matriz pero dejar en paz otros valores?

También he preguntado por la persona:

Person.find({...}, function(err, person) { person.items ..... // I might be able to search through all the items here and find item with id 2 then update the values I want and call person.save(). });


En Mongoose, podemos actualizar el valor de la matriz usando $set dentro de la notación punto ( . ) A un valor específico de la siguiente manera

db.collection.update({"_id": args._id, "viewData._id": widgetId}, {$set: {"viewData.$.widgetData": widgetDoc.widgetData}})


En mangosta podemos actualizar, como simple matriz

user.updateInfoByIndex(0,"test") User.methods.updateInfoByIndex = function(index, info) ={ this.arrayField[index]=info this.save() }


Estás cerca; debe usar la notación de puntos en su $set para hacer eso:

Person.update({''items.id'': 2}, {''$set'': { ''items.$.name'': ''updated item2'', ''items.$.value'': ''two updated'' }}, function(err) { ...


Para cada documento, el $set operador de actualización puede establecer múltiples valores , por lo que en lugar de reemplazar el objeto completo en la matriz de items , puede establecer los campos de name y value del objeto individualmente.

{''$set'': {''items.$.name'': update.name , ''items.$.value'': update.value}}


model.update({"_id": 1, "items.id": "2"}, {$set: {"items.$.name": "yourValue","items.$.value": "yourvalue"}})

Documento de Mongodb