MongoManager.coffee 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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["meta.end_ts"] = { $gte: options.from }
  41. if options.to?
  42. query["meta.start_ts"] = { $lte: options.to }
  43. cursor = db.docHistory
  44. .find( query )
  45. .sort( "meta.end_ts": -1 )
  46. if options.limit?
  47. cursor.limit(options.limit)
  48. cursor.toArray callback
  49. ensureIndices: (callback = (error) ->) ->
  50. db.docHistory.ensureIndex { doc_id: 1, "meta.start_ts": 1, "meta.end_ts": 1 }, callback