mongodb.js 727 B

123456789101112131415161718192021222324252627282930313233343536
  1. const Settings = require('@overleaf/settings')
  2. const { MongoClient, ObjectId } = require('mongodb')
  3. const clientPromise = MongoClient.connect(
  4. Settings.mongo.url,
  5. Settings.mongo.options
  6. )
  7. let setupDbPromise
  8. async function waitForDb() {
  9. if (!setupDbPromise) {
  10. setupDbPromise = setupDb()
  11. }
  12. await setupDbPromise
  13. }
  14. const db = {}
  15. async function setupDb() {
  16. const internalDb = (await clientPromise).db()
  17. db.docs = internalDb.collection('docs')
  18. db.docOps = internalDb.collection('docOps')
  19. }
  20. async function addCollection(name) {
  21. await waitForDb()
  22. const internalDb = (await clientPromise).db()
  23. db[name] = internalDb.collection(name)
  24. }
  25. module.exports = {
  26. db,
  27. ObjectId,
  28. addCollection,
  29. waitForDb,
  30. }