From 75ee7a967fbdcfadbb3c3cb71a3f181bfa30e63c Mon Sep 17 00:00:00 2001 From: Louis Chatriot Date: Sun, 17 Aug 2014 18:29:48 +0200 Subject: [PATCH] Can specify 2 or 3 args and still get desired results --- lib/cursor.js | 12 ++++++------ lib/datastore.js | 23 +++++++++++++++++++---- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/lib/cursor.js b/lib/cursor.js index bd4df63..4d98262 100644 --- a/lib/cursor.js +++ b/lib/cursor.js @@ -58,7 +58,7 @@ Cursor.prototype._exec = function(callback) { , res = [], added = 0, skipped = 0, self = this , i, keys, key ; - + try { for (i = 0; i < candidates.length; i += 1) { if (model.match(candidates[i], this.query)) { @@ -69,7 +69,7 @@ Cursor.prototype._exec = function(callback) { } else { res.push(candidates[i]); added += 1; - if (this._limit && this._limit <= added) { break; } + if (this._limit && this._limit <= added) { break; } } } else { res.push(candidates[i]); @@ -83,7 +83,7 @@ Cursor.prototype._exec = function(callback) { // Apply all sorts if (this._sort) { keys = Object.keys(this._sort); - + // Sorting var criteria = []; for (i = 0; i < keys.length; i++) { @@ -101,11 +101,11 @@ Cursor.prototype._exec = function(callback) { } return 0; }); - + // Applying limit and skip var limit = this._limit || res.length , skip = this._skip || 0; - + res = res.slice(skip, skip + limit); } @@ -123,4 +123,4 @@ Cursor.prototype.exec = function () { // Interface -module.exports = Cursor; \ No newline at end of file +module.exports = Cursor; diff --git a/lib/datastore.js b/lib/datastore.js index 4592316..cfe35d6 100644 --- a/lib/datastore.js +++ b/lib/datastore.js @@ -377,12 +377,25 @@ Datastore.prototype.count = function(query, callback) { * If no callback is passed, we return the cursor so that user can limit, skip and finally exec * @param {Object} query MongoDB-style query */ -Datastore.prototype.find = function (query, callback) { +Datastore.prototype.find = function (query, projection, callback) { + switch (arguments.length) { + case 1: + projection = {}; + // callback is undefined, will return a cursor + break; + case 2: + if (typeof projection === 'function') { + callback = projection; + projection = {}; + } + break; + } + var cursor = new Cursor(this, query, function(err, docs, callback) { var res = [], i; - + if (err) { return callback(err); } - + for (i = 0; i < docs.length; i += 1) { res.push(model.deepCopy(docs[i])); } @@ -407,7 +420,7 @@ Datastore.prototype.findOne = function (query, callback) { if (docs.length === 1) { return callback(null, model.deepCopy(docs[0])); } else { - return callback(null, null); + return callback(null, null); } }); @@ -547,4 +560,6 @@ Datastore.prototype.remove = function () { + + module.exports = Datastore;