使用mongoskin。
我正在尝试进行简单的更新,并继续收到错误:
错误:传入的参数必须是12个字节的单个字符串或十六进制格式的24个十六进制字符的字符串
我尝试过不同的代码:
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,我可以通过mongo使用cli进行更新:
db.sessions.update( {'_id': ObjectId('4eb5444d39e153e60b000001')}, {$set: {"status":'unavailable'}} );
答案 0 :(得分:17)
store.collection('sessions').updateById(session._id.toString(), {$set: status_obj} );
添加.toString()最终为我解决了这个问题。
答案 1 :(得分:3)
与Mongoose有类似的错误,原来我的id错了,但也许这个验证功能可以帮助你:
function validate_id(id) {
return !(id !== null && (id.length != 12 && id.length != 24));
}
答案 2 :(得分:1)
将此放在您的javascript
的根目录中 ObjectID = require('mongoskin').ObjectID;
collection.updateById(new ObjectID(song._id), <json>, <callback>);
将你在节点中获得的_id放入mongo需要的格式
答案 3 :(得分:0)
您还可以尝试使用trim()
删除字符串之前或之后的空格,这将导致相同的原始错误:
store.collection('sessions').updateById(session._id.toString().trim(), {$set: status_obj} );