graph-common
Version:
Open Graph API core js lib
68 lines (50 loc) • 2.17 kB
text/coffeescript
MongoDBStorage is MongoDB Graph API Storage implementation using mongoose
class MongoDBStorage
constructor: (database_uri) ->
= require('mongoose')
= uniqueValidator: require('mongoose-unique-validator')
= .Schema
= .connect(database_uri)
= .connection
apply_plugins: (schema) ->
for plugin_name of
schema.plugin([plugin_name])
create: (query, callback) ->
model =
object = new model(query.data)
object.save(callback)
read: (query, callback) ->
model =
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 =
delete: (query, callback) ->
model: (args...) ->
return .model(args...)
disconnect: () ->
.close()
: (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
: (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