msgpack-lite icon indicating copy to clipboard operation
msgpack-lite copied to clipboard

Noty support encode/decode for MongoDB ObjectId.

Open charleslxh opened this issue 8 years ago • 2 comments

// This is a mongodb document.
var doc = {
     _id: ObjectId,
    ....
}
var encodeObjectId = msgpack.encode(doc._id)
var decodeObjectId = msgpack.decode(encodeObjectId)

decodeObjectId is { _bsontype: 'ObjectID', id: 'XOú”H§%¤ÿ\u0016\u001a' }

charleslxh avatar Dec 13 '16 13:12 charleslxh

const msgpack = require('msgpack-lite');
const mongoose = require('mongoose');
const ObjectId = mongoose.Types.ObjectId;

const codec = msgpack.createCodec({});

// Encode ObjectId
codec.addExtPacker(0x3F, ObjectId, (value) => {
	return msgpack.encode(value.toString());
});

// Decode ObjectId
codec.addExtUnpacker(0x3F, (value) => {
	let id = msgpack.decode(value);
	return new ObjectId(id);
});

// After use that
msgpack.encode(data, {codec: codec});
msgpack.decode(data, {codec: codec});

men232 avatar Feb 19 '17 14:02 men232

Convert ObjectID to String

var encodeObjectId = msgpack.encode(doc._id.toString())

Or .lean() your query before .exec()

mykiimike avatar Jun 29 '20 08:06 mykiimike