From c3eb8c157d079b91c1c92d1a899b5400e6fc63b6 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Fri, 22 Mar 2013 13:06:27 +0300 Subject: [PATCH] Added projection in query API --- api.coffee | 14 +++++++++++++- common.coffee | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/api.coffee b/api.coffee index f77a885..a0e60a6 100644 --- a/api.coffee +++ b/api.coffee @@ -2,6 +2,7 @@ config = require './config' util = require 'util' http = require 'http' url = require 'url' +common = require './common' db = require './db' mongodb = require 'mongodb' querystring = require 'querystring' @@ -292,7 +293,18 @@ else else q = {} q = query.expand(q) if collectionName is 'devices' - cur = collection.find(q, {}, {batchSize : 50}) + + if urlParts.query.projection? + projection = {} + for p in urlParts.query.projection.split(',') + p = p.trim() + projection[p] = 1 + if collectionName is 'devices' + for k,v of config.ALIASES + if k == p or common.startsWith(k, "#{p}.") + projection[a] = 1 for a in v + + cur = collection.find(q, projection, {batchSize : 50}) cur.skip(parseInt(urlParts.query.skip)) if urlParts.query.skip? cur.limit(parseInt(urlParts.query.limit)) if urlParts.query.limit? diff --git a/common.coffee b/common.coffee index 3c257c9..860762a 100644 --- a/common.coffee +++ b/common.coffee @@ -15,6 +15,10 @@ exports.endsWith = (str, suffix) -> str.indexOf(suffix, str.length - suffix.length) isnt -1 +exports.startsWith = (str, prefix) -> + str.substring(0, prefix.length) == prefix + + exports.arrayToHash = (arr) -> hash = {} for i in arr