Skip to content

Commit

Permalink
#38 Fixing update/delete methods
Browse files Browse the repository at this point in the history
  • Loading branch information
tracend committed Jan 13, 2013
1 parent 1911334 commit 70813b6
Showing 1 changed file with 26 additions and 11 deletions.
37 changes: 26 additions & 11 deletions helpers/mongodbStore.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
var ObjectID = require('mongodb').ObjectID;

module.exports = function( db ) {
return function(req, res, next) {
var callback = function(err, result) {
if (err) return next(err);
if (result) {
// is the result always an array?
for( var i in result ){
// rename the "_id" to "id"
if(result[i]._id){
result[i].id = result[i]._id;
delete result[i]._id;
}
}
};
res.end(result);
};

Expand All @@ -12,36 +24,39 @@ module.exports = function( db ) {

read: function() {
// "normalize" to what MongoDB expects
if (req.model.id) req.model._id = req.model.id;
var id = (req.model.id) ? req.model.id : false;

if (req.model._id) {
if (id) {
// model
db.find({ _id: req.model._id }, {limit:1}, callback);
db.find({ _id: id }, {limit:1}, callback);
} else {
// collection
// - use a scope if available
if(req.scope){
db.find(req.model, req.scope, callback);
} else {
db.find(req.model, callback);
db.find(req.model).toArray(callback);
}
}
},

update: function() {
// copy model and delete _id
// copy model and delete id
var id = req.model.id;
var model = req.model;
delete model._id;
db.update({ _id: req.model._id }, { '$set': model }, function(err) {
if (err) return next(err);
//delete model.id;
//
db.update({ _id: new ObjectID( id ) }, { '$set': model }, {safe:true}, function(err, result) {
if (err) return next(err);
res.end(req.model);
});
},

delete: function() {
db.remove({ _id: req.model._id }, function(err) {
if (err) return next(err);
var id = req.model.id;
//
db.remove({ _id: new ObjectID( id ) }, function(err, result) {
if (err) return next(err);
res.end(req.model);
});
}
Expand Down

0 comments on commit 70813b6

Please sign in to comment.