Skip to content

Commit 7a86066

Browse files
committed
test(model): repro #9418
1 parent d2abbf8 commit 7a86066

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

test/model.populate.test.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9171,6 +9171,59 @@ describe('model: populate:', function() {
91719171
assert.equal(docs[1]._id.toString(), p2._id.toString());
91729172
assert.deepEqual(docs[0].children.map(c => c._id), [1]);
91739173
assert.deepEqual(docs[1].children.map(c => c._id), [4]);
9174+
9175+
docs = yield Parent.find().sort({ _id: 1 }).
9176+
populate({ path: 'children', options: { perDocumentLimit: 1 } });
9177+
assert.equal(docs[0]._id.toString(), p._id.toString());
9178+
assert.equal(docs[1]._id.toString(), p2._id.toString());
9179+
assert.deepEqual(docs[0].children.map(c => c._id), [1]);
9180+
assert.deepEqual(docs[1].children.map(c => c._id), [4]);
9181+
});
9182+
});
9183+
9184+
it('perDocumentLimit as option to `populate()` method (gh-7318) (gh-9418)', function() {
9185+
const childSchema = Schema({ _id: Number, parentId: 'ObjectId' });
9186+
9187+
const parentSchema = Schema({ name: String });
9188+
parentSchema.virtual('children', {
9189+
ref: 'Child',
9190+
localField: '_id',
9191+
foreignField: 'parentId',
9192+
justOne: false,
9193+
options: { sort: { _id: 1 } }
9194+
});
9195+
9196+
const Child = db.model('Child', childSchema);
9197+
const Parent = db.model('Parent', parentSchema);
9198+
9199+
return co(function*() {
9200+
const p = yield Parent.create({ name: 'test' });
9201+
9202+
yield Child.create([
9203+
{ _id: 1, parentId: p._id },
9204+
{ _id: 2, parentId: p._id },
9205+
{ _id: 3, parentId: p._id }
9206+
]);
9207+
9208+
const p2 = yield Parent.create({ name: 'test2' });
9209+
yield Child.create([
9210+
{ _id: 4, parentId: p2._id },
9211+
{ _id: 5, parentId: p2._id }
9212+
]);
9213+
9214+
let docs = yield Parent.find().sort({ _id: 1 }).
9215+
populate({ path: 'children', perDocumentLimit: 1 });
9216+
assert.equal(docs[0]._id.toString(), p._id.toString());
9217+
assert.equal(docs[1]._id.toString(), p2._id.toString());
9218+
assert.deepEqual(docs[0].children.map(c => c._id), [1]);
9219+
assert.deepEqual(docs[1].children.map(c => c._id), [4]);
9220+
9221+
docs = yield Parent.find().sort({ _id: 1 }).
9222+
populate({ path: 'children', options: { perDocumentLimit: 1 } });
9223+
assert.equal(docs[0]._id.toString(), p._id.toString());
9224+
assert.equal(docs[1]._id.toString(), p2._id.toString());
9225+
assert.deepEqual(docs[0].children.map(c => c._id), [1]);
9226+
assert.deepEqual(docs[1].children.map(c => c._id), [4]);
91749227
});
91759228
});
91769229

0 commit comments

Comments
 (0)