• Jump To … +
    bootstrap.litcoffee configuration_manager.litcoffee echo_router.litcoffee gql.litcoffee graph.litcoffee index.litcoffee mongodb_storage.litcoffee node_manager.litcoffee node_schema.litcoffee query.litcoffee redirect_router.litcoffee router_manager.litcoffee router_schema.litcoffee schema_manager.litcoffee schema_schema.litcoffee static_router.litcoffee storage_manager.litcoffee storage_router.litcoffee
  • mongodb_storage.litcoffee

  • ¶

    MongoDBStorage is MongoDB Graph API Storage implementation using mongoose

    class MongoDBStorage
    
      constructor: (database_uri) ->
        @mongoose = require('mongoose')
        @plugins = uniqueValidator: require('mongoose-unique-validator')
        @Schema = @mongoose.Schema
        @db = @mongoose.connect(database_uri)
        @connection = @db.connection
    
      apply_plugins: (schema) ->
        for plugin_name of @plugins
          schema.plugin(@plugins[plugin_name])
    
      create: (query, callback) ->
        model = @model(query.schema)
        object = new model(query.data)
        object.save(callback)
    
      read: (query, callback) ->
        model = @model(query.schema)
        search_query = query.search_query || {}
        conditions = search_query.conditions || {}
        dbquery = model.find(conditions)
    
        properties = search_query.property?.join(' ') || undefined
        if properties
          dbquery = dbquery.select(properties)
    
        MongoDBStorage.add_uniq_search_option(dbquery, search_query, 'limit')
        MongoDBStorage.add_uniq_search_option(dbquery, search_query, 'skip')
        MongoDBStorage.add_multiple_search_option(dbquery, search_query, 'sort')
        MongoDBStorage.add_multiple_search_option(dbquery, search_query, 'populate')
    
        dbquery.exec((err, data) -> callback(data))
    
      update: (query, callback) ->
        model = @model(query.schema)
    
      delete: (query, callback) ->
    
      model: (args...) ->
        return @mongoose.model(args...)
    
      disconnect: () ->
        @connection.close()
    
      @add_uniq_search_option: (dbquery, search_query, option) ->
        value = search_query[option]
        if value and typeof value == 'array'
          value = value.pop()
        if value
          dbquery = dbquery[option](value)
        return dbquery
    
      @add_multiple_search_option: (dbquery, search_query, option) ->
        values = search_query[option]
        if values and typeof values == 'string'
          values = [values]
    
        if values
          dbquery = dbquery[option](value) for value in values
        return dbquery
    
    
    module.exports = MongoDBStorage