MongoManager.coffee 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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
  36. getUpdates:(doc_id, options = {}, callback = (error, updates) ->) ->
  37. query =
  38. doc_id: ObjectId(doc_id.toString())
  39. if options.from?
  40. query["v"] ||= {}
  41. query["v"]["$gte"] = options.from
  42. if options.to?
  43. query["v"] ||= {}
  44. query["v"]["$lte"] = options.to
  45. cursor = db.docHistory
  46. .find( query )
  47. .sort( v: -1 )
  48. if options.limit?
  49. cursor.limit(options.limit)
  50. cursor.toArray callback
  51. ensureIndices: (callback = (error) ->) ->
  52. db.docHistory.ensureIndex { doc_id: 1, v: 1 }, callback