Skip to content

Commit

Permalink
populate; now compatible with lean
Browse files Browse the repository at this point in the history
closes #1260
  • Loading branch information
aheckmann committed Feb 27, 2013
1 parent ad23149 commit 0572d11
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 9 deletions.
22 changes: 13 additions & 9 deletions lib/query.js
Original file line number Diff line number Diff line change
Expand Up @@ -1516,18 +1516,22 @@ Query.prototype.execFind = function (callback) {
function cb (err, docs) {
if (err) return promise.error(err);

if (true === options.lean || 0 === docs.length) {
if (0 === docs.length) {
return promise.complete(docs);
}

if (!self.options.populate) {
return completeMany(model, docs, fields, self, promise);
return true === options.lean
? promise.complete(docs)
: completeMany(model, docs, fields, self, promise);
}

var pop = utils.object.vals(self.options.populate);
model.populate(docs, pop, function (err, docs) {
if (err) return promise.error(err);
completeMany(model, docs, fields, self, promise);
return true === options.lean
? promise.complete(docs)
: completeMany(model, docs, fields, self, promise);
});
}

Expand Down Expand Up @@ -1611,18 +1615,18 @@ Query.prototype.findOne = function (callback) {
if (err) return promise.error(err);
if (!doc) return promise.complete(null);

if (true === options.lean) {
return promise.complete(doc);
}

if (!self.options.populate) {
return completeOne(model, doc, fields, self, promise);
return true === options.lean
? promise.complete(doc)
: completeOne(model, doc, fields, self, promise);
}

var pop = utils.object.vals(self.options.populate);
model.populate(doc, pop, function (err, doc) {
if (err) return promise.error(err);
completeOne(model, doc, fields, self, promise);
return true === options.lean
? promise.complete(doc)
: completeOne(model, doc, fields, self, promise);
})
}));

Expand Down
80 changes: 80 additions & 0 deletions test/model.ref.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1847,5 +1847,85 @@ describe('model: ref:', function(){
})
})

describe('populating combined with lean (gh-1260)', function(){
it('with findOne', function(done){
var db = start()
, BlogPost = db.model('RefBlogPost', posts + random())
, User = db.model('RefUser', users + random())

User.create({
name : 'Guillermo'
, email : 'rauchg@gmail.com'
}, function (err, creator) {
assert.ifError(err);

BlogPost.create({
title : 'woot'
, _creator : creator
}, function (err, post) {
assert.ifError(err);

BlogPost
.findById(post._id)
.lean()
.populate('_creator')
.exec(function (err, post) {
db.close();
assert.ifError(err);

assert.ok(utils.isObject(post._creator));
assert.equal(post._creator.name, 'Guillermo');
assert.equal(post._creator.email, 'rauchg@gmail.com');
done();
});
});
});
})

it('with find', function(done){
var db = start()
, BlogPost = db.model('RefBlogPost', posts + random())
, User = db.model('RefUser', users + random());

User.create({
name : 'Fan 1'
, email : 'fan1@learnboost.com'
}, {
name : 'Fan 2'
, email : 'fan2@learnboost.com'
}, function (err, fan1, fan2) {
assert.ifError(err);

BlogPost.create({
title : 'Woot'
, fans : [fan1, fan2]
}, {
title : 'Woot2'
, fans : [fan2, fan1]
}, function (err, post1, post2) {
assert.ifError(err);

BlogPost
.find({ _id: { $in: [post1._id, post2._id ] } })
.populate('fans')
.lean()
.exec(function (err, blogposts) {
db.close();
assert.ifError(err);

assert.equal(blogposts[0].fans[0].name,'Fan 1');
assert.equal(blogposts[0].fans[0].email,'fan1@learnboost.com');
assert.equal(blogposts[0].fans[1].name,'Fan 2');
assert.equal(blogposts[0].fans[1].email,'fan2@learnboost.com');

assert.equal(blogposts[1].fans[0].name,'Fan 2');
assert.equal(blogposts[1].fans[0].email,'fan2@learnboost.com');
assert.equal(blogposts[1].fans[1].name,'Fan 1');
assert.equal(blogposts[1].fans[1].email,'fan1@learnboost.com');
done();
});
});
});
})
})
});

0 comments on commit 0572d11

Please sign in to comment.