2011-11-05 10 views
6

Utilizando mongoskin.NodeJS & Mongoskin, no se puede hacer una actualización simple. El argumento pasado debe ser de 12 bytes o de 24 cadenas hexagonales

que estoy tratando de hacer una actualización sencilla y sigo en conseguir el error:

error: argumento pasado en debe ser una única cadena de 12 bytes o una cadena de 24 caracteres hexadecimales en formato hexadecimal

código diferente que he intentado:

var mongo = require('mongoskin'), 
    store = mongo.db(MONGO_DB_ADDESS + ':' + MONGO_DB_PORT + '/' + MONGO_DB_NAME + '?auto_reconnect=false'); 

session._id = 4eb5444d39e153e60b000001; 

store.collection('sessions').updateById({_id : session._id}, {$set: status_obj}, {upsert : false, multi : false, safe : false}, function() { ... }); 

store.collection('sessions').updateById(session._id, {$set: status_obj});  

Incluso intentado:

store.collection('sessions').update({'_id': session._id}, {$set: {"status":'unavailable'}});  

¡Cualquier ayuda apreciada!

Gracias FYI, puedo hacer la actualización a través mongo mediante la CLI bien:

db.sessions.update({'_id': ObjectId('4eb5444d39e153e60b000001')}, {$set: {"status":'unavailable'}}); 

Respuesta

17
store.collection('sessions').updateById(session._id.toString(), {$set: status_obj}); 

Adición .toString() finalmente se resolvieron esto para mí.

+0

¿Puede explicar qué hace el $ set dentro de {$ set: status_obj}? – Sobiaholic

+0

El $ set le dice a mongo que solo actualice las propiedades que proporcione. Sin él, eliminará cualquier propiedad que no se haya pasado a la actualización. –

3

tenía un error similar con Mangosta, resultó que mi identificación estaba mal, pero tal vez esta función de validación puede ayudar a su:

function validate_id(id) { 
    return !(id !== null && (id.length != 12 && id.length != 24)); 
} 
1

poner esto en la raíz de su javascript

ObjectID = require('mongoskin').ObjectID;

collection.updateById(new ObjectID(song._id), <json>, <callback>);

pone _ID que se obtiene en el nodo en el formato mongo necesita

0

También puede intentar usar trim() para eliminar espacios en blanco antes o después de la cadena, que causará el mismo error original:

store.collection('sessions').updateById(session._id.toString().trim(), {$set: status_obj}); 
Cuestiones relacionadas