2011-06-02 11 views
5

Conexión a nuestra instancia Mongo mediante la CLI, puede utilizar los operadores de actualización modificadoras bien:con los operadores de modificador en el Mongo CLI funciona pero no de código usando Node.js mangosta

db.users. update ({nickname: 'mcoalson'}, {"$ addToSet": {room_ref: "b"}}) db.users.update ({nickname: 'mcoalson'}, {"$ addToSet": {room_ref: " c "}}) db.users.findOne ({apodo: 'mcoalson'}) { "_id": ObjetoID (" 4de5e9e982e9556c2a000003"), "apodo": "mcoalson", "room_ref": [ "a", "d", "b", "c" ] }

Sin embargo haciendo exactamente lo mismo en los Node.js en el mismo documento no hay resultados.

db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}}); 
db.User.update({'nickname': 'mcoalson'}, {"$addToSet": {'room_ref': "f"}}); 

"room_ref": [ "a", "d", "b", "c" ]

Claramente "b" no se eliminó y "f" no era adicional. He intentado todos los escenarios imaginables de citas que pude pensar, pero nada cambia. Puedo usar find() y findOne() del código node.js y estoy usando las mismas credenciales, ¿algún consejo?

+1

¿Está seguro de que solo hay 1 documento en el archivo db con apodo 'mcoalson'? De lo contrario, debe pasar la opción 'múltiple' para actualizar más de un documento a la vez. –

+0

Asegúrese de que su versión de mangosta esté actualizada. Hubo muchas correcciones de errores para 'actualizar' últimamente: https://github.com/LearnBoost/mongoose/commits/master –

Respuesta

0

Disculpe la demora.

La CLI de mongo es sincrónica, node.js es asíncrona. ¿Estás usando el código como lo publicaste o tienes las devoluciones de llamada adecuadas? Su prueba debe tener este aspecto:

db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}}, function(){ 
    db.User.findOne({'nickname': 'mcoalson'}, function(user){ 
     console.log('changed user:', user) 
    }) 
}) 
0

que tenían el mismo problema, y ​​terminó sin pasar por mangosta y utilizando el factor subyacente, en el que no se produjo el problema.

Así que en lugar de

db.User.update(...) 

Uso:

db.User.collection.update(...) 

Espero que ayude.

Cuestiones relacionadas