@@ -9171,6 +9171,59 @@ describe('model: populate:', function() {
9171
9171
assert . equal ( docs [ 1 ] . _id . toString ( ) , p2 . _id . toString ( ) ) ;
9172
9172
assert . deepEqual ( docs [ 0 ] . children . map ( c => c . _id ) , [ 1 ] ) ;
9173
9173
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 ] ) ;
9174
9227
} ) ;
9175
9228
} ) ;
9176
9229
0 commit comments