NodeJS&Mongoskin,不能做简单的更新。 传入的参数必须是12个字节或24个hexstring

使用mongoskin 。

我试图做一个简单的更新,我不断得到错误:

错误:传入的参数必须是hex格式的12个字节的单个string或24个hex字符的string

我试过的不同的代码:

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} ); 

甚至尝试过:

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

任何帮助感激!

谢谢Fyi,我可以通过使用cli的mongo来更新:

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

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

添加.toString()终于解决了这个对我来说。

有与Mongoose类似的错误,事实certificate我的ID是错的,但也许这个validationfunction可以帮助你:

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

把这个放在你的javascript的根目录下

ObjectID = require('mongoskin').ObjectID;

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

把节点中的_id放到mongo需要的格式中

您也可以尝试使用trim()删除string之前或之后的空格,这将导致相同的原始错误:

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