Skip to content

Commit

Permalink
queryResult returns modelInstances.
Browse files Browse the repository at this point in the history
  • Loading branch information
colladow committed Jun 17, 2010
1 parent de07349 commit eec85d9
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 35 deletions.
4 changes: 2 additions & 2 deletions examples/test.js
Expand Up @@ -122,10 +122,10 @@ u.save(function(success, obj){
});
});

var q = user.get({ username: 'colladox' }).limit(2).fields({ username: 1, last: 1 }).explain();
var q = user.get({ username: 'colladox' }).limit(2).fields({ username: 1, last: 1 });

q.each(function(err, doc){
sys.puts('DOC---------------');
sys.puts(sys.inspect(doc));
sys.puts(sys.inspect(doc.toObject()));
});

71 changes: 38 additions & 33 deletions lib/model.js
Expand Up @@ -74,7 +74,7 @@ var model = function(options){
};

self.get = function(query){
return queryResult(collectionName, query);
return queryResult(self, collectionName, query);
};

// query the database for the data associated with this model
Expand Down Expand Up @@ -210,7 +210,7 @@ var modelInstance = function modelInstance(spec){

// forward the object
callback(true, obj);

handle.close();
});
}else{
Expand Down Expand Up @@ -244,6 +244,18 @@ var modelInstance = function modelInstance(spec){
fieldValues[fieldName] = value;
};

self.toObject = function(){
var obj = {};

for(var f in fieldValues){
if(fieldValues.hasOwnProperty(f)){
obj[f] = fieldValues[f];
}
}

return obj;
};

self.toString = function(){
var str = '';

Expand Down Expand Up @@ -293,33 +305,23 @@ var modelInstance = function modelInstance(spec){
return self;
};

var queryResult = function(collection, query){
// options to find:
// ['limit','sort','fields','skip','hint','explain','snapshot','timeout']
var explain = null,
fields = {},
limit = 0,
hint = null,
skip = 0,
snapshot = false,
sort = [],
timeout = 0,
var queryResult = function(model, collection, query){
var options = {},
self = {};

options['explain'] = null,
options['fields'] = {},
options['hint'] = null,
options['limit'] = 0,
options['skip'] = 0,
options['snapshot'] = false,
options['sort'] = [],
options['timeout'] = 0,

query = query || {};

// actually run the query, returning a modelInstance for every document
self.each = function(callback){
options = {};

options['explain'] = explain;
options['fields'] = fields;
options['limit'] = limit;
options['hint'] = hint;
options['skip'] = skip;
options['snapshot'] = snapshot;
options['sort'] = sort;
options['timeout'] = timeout;

db.find(collection, query, options, function(handle, err, cursor){
if(err){
callback(err, null);
Expand All @@ -328,58 +330,61 @@ var queryResult = function(collection, query){

cursor.each(function(err, doc){
if(doc){
callback(err, doc);
callback(err, model.create(doc, false));
}else{
handle.close();
}
});
});
};

// ===============================================================
// chainable methods to modify the options
// ===============================================================
self.explain = function(){
explain = true;
options['explain'] = true;

return self;
};

self.fields = function(obj){
fields = obj;
options['fields'] = obj;

return self;
};

self.hint = function(obj){
hint = obj;
options['hint'] = obj;

return self;
};

self.limit = function(num){
limit = num;
options['limit'] = num;

return self;
};

self.skip = function(num){
skip = num;
options['skip'] = num;

return self;
};

self.snapshot = function(){
snapshot = true;
options['snapshot'] = true;

return self;
};

self.sort = function(obj){
sort = obj;
options['sort'] = obj;

return self;
};

self.timeout = function(num){
timeout = num;
options['timeout'] = num;

return self;
};
Expand Down

0 comments on commit eec85d9

Please sign in to comment.