Ever considered caching your mongoose models in a super caching tool like Redis to avoid frequent MongoDB hit and refrained from doing that because you may lose the mongoose object privileges like calling model._id as model.id or model.toObject() or the superior one model.populate() and others.
Here comes the saviour,
https://mongoosejs.com/docs/api.html#model_Model.hydrate
Hydrate method in mongoose API converts your raw JSON data into the mongoose model object(s).
Example: Simple model
// set cache
let todo = Todo.findById(id);
redis.set(key, todo); // stores as raw json
// read cache
let todoCache = redis.get(key); // returns raw json
let todo = Todo.hydrate(todoCache); // converts in to mongoose model
let createdBy = todo.populate('createdBy');
Example: Array of models
// set cache
let todos = Todo.findAll();
redis.set('todos', todos); // stores as array of son
// read cache
let cachedTodos = redis.get('todos'); // returns array of json
let todos = cachedTodos.map(todo => Todo.hydrate(todo)); // converts in to mongoose model
let incompleteTodos = todos.filter(todo => !todo.isDone);
Top comments (0)