MongoManager.coffee 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. {db, ObjectId} = require "./mongojs"
  2. async = require "async"
  3. module.exports = MongoManager =
  4. getLastCompressedUpdate: (doc_id, callback = (error, update) ->) ->
  5. db.docHistory
  6. .find(doc_id: ObjectId(doc_id.toString()))
  7. .sort( "meta.end_ts": -1)
  8. .limit(1)
  9. .toArray (error, compressedUpdates) ->
  10. return callback(error) if error?
  11. return callback null, compressedUpdates[0] or null
  12. deleteCompressedUpdate: (id, callback = (error) ->) ->
  13. db.docHistory.remove({ _id: ObjectId(id.toString()) }, callback)
  14. popLastCompressedUpdate: (doc_id, callback = (error, update) ->) ->
  15. MongoManager.getLastCompressedUpdate doc_id, (error, update) ->
  16. return callback(error) if error?
  17. if update?
  18. MongoManager.deleteCompressedUpdate update._id, (error) ->
  19. return callback(error) if error?
  20. callback null, update
  21. else
  22. callback null, null
  23. insertCompressedUpdates: (doc_id, updates, callback = (error) ->) ->
  24. jobs = []
  25. for update in updates
  26. do (update) ->
  27. jobs.push (callback) -> MongoManager.insertCompressedUpdate doc_id, update, callback
  28. async.series jobs, callback
  29. insertCompressedUpdate: (doc_id, update, callback = (error) ->) ->
  30. db.docHistory.insert {
  31. doc_id: ObjectId(doc_id.toString())
  32. op: update.op
  33. meta: update.meta
  34. v: update.v
  35. }, callback