2012-03-28 18 views
6

Tengo un problema importante mientras intento actualizar un documento incrustado en mongodb. Intenté con dos métodos y ninguno de ellos funcionó, y busqué en todas partes las razones por las cuales no se actualiza. De todos modos, mi esquema se ve así (puedo notar que el documento incrustado que estoy tratando de actualizar es de tipo Mixto).Mongoose no está actualizando el documento incrustado

var UserModel = new mongoose.Schema({ 
    account: String, 
    salt: String, 
    password: String, 
    highlight_words: String, 
    networks: {}, 
    ip: String, 
    ident: String, 
    is_connected: Boolean, 
    account_type: String 
}); 

He intentado actualizar 'redes' con estos dos fragmentos de código y ninguno funciona. Estoy a punto de sacarme el pelo.

self.userModel.update({account: key}, {networks: self.client_data[key]['networks']}, function(err) {}); 

Y (nota que he intentado añadir una devolución de llamada a save(), y se ejecuta sin errores)

self.userModel.findOne({account: key}, function(err, doc) { 
    doc.networks = self.client_data[key]['networks']; 
    doc.markModified('networks').save(); 
}); 

se agradecería cualquier ayuda! ¡Gracias!

Editar:

El problema era que el objeto era igual que {'some.thing': {more: 'stuff'}} es obvio que no le gustaba el. lo cual es comprensible!

+0

¿Cuál es el valor de 'self.client_data [clave] [ 'redes']'? Intente reemplazarlo con algunos literales para ayudar a su depuración. – paulmelnikow

+0

Es un objeto bastante grande, aunque sé que está poblado. Intenté reemplazarlo con 'doc.networks = {test: 123};' y aún así no guardé el documento ... – rickibalboa

+0

En la primera versión también, supongo? ¿Hay alguna posibilidad de que no coincida con nada? ¿Funciona 'delete ({account: key})'? – paulmelnikow

Respuesta

11

Probar doc.markModified('networks');. Parece que networks es un tipo sin esquema. Mongoose no puede detectar automáticamente los cambios en los tipos sin esquema.

+0

me salvaste la vida – Unitech

+0

eres mi héroe! –

+0

Hombre impresionante que funcionó para mí :) –

2

Debe definir su esquema completamente para que esto funcione. Por ejemplo:

redes { tipo: "Cadena" }

Cuestiones relacionadas