@@ -8627,4 +8627,50 @@ describe('model: populate:', function() {
8627
8627
assert . equal ( team . developers [ 2 ] . ticketCount , 0 ) ;
8628
8628
} ) ;
8629
8629
} ) ;
8630
+
8631
+ it ( 'handles virtual populate underneath embedded discriminator nested path (gh-6488) (gh-8173)' , function ( ) {
8632
+ return co ( function * ( ) {
8633
+ const UserModel = db . model ( 'gh6488_User' , Schema ( {
8634
+ employeeId : Number ,
8635
+ name : String
8636
+ } ) ) ;
8637
+
8638
+ const eventSchema = Schema ( { message : String } , { discriminatorKey : 'kind' } ) ;
8639
+ const batchSchema = Schema ( { nested : { events : [ eventSchema ] } } ) ;
8640
+
8641
+ const nestedLayerSchema = Schema ( { users : [ Number ] } ) ;
8642
+ nestedLayerSchema . virtual ( 'users_$' , {
8643
+ ref : 'gh6488_User' ,
8644
+ localField : 'users' ,
8645
+ foreignField : 'employeeId'
8646
+ } ) ;
8647
+
8648
+ const docArray = batchSchema . path ( 'nested.events' ) ;
8649
+ const Clicked = docArray .
8650
+ discriminator ( 'gh6488_Clicked' , Schema ( { nestedLayer : nestedLayerSchema } ) ) ;
8651
+ const Purchased = docArray .
8652
+ discriminator ( 'gh6488_Purchased' , Schema ( { purchased : String } ) ) ;
8653
+
8654
+ const Batch = db . model ( 'gh6488' , batchSchema ) ;
8655
+
8656
+ yield UserModel . create ( { employeeId : 1 , name : 'test' } ) ;
8657
+ yield Batch . create ( {
8658
+ nested : {
8659
+ events : [
8660
+ { kind : 'gh6488_Clicked' , nestedLayer : { users : [ 1 ] } } ,
8661
+ { kind : 'gh6488_Purchased' , purchased : 'test' }
8662
+ ]
8663
+ }
8664
+ } ) ;
8665
+
8666
+ let res = yield Batch . findOne ( ) .
8667
+ populate ( 'nested.events.nestedLayer.users_$' ) ;
8668
+ assert . equal ( res . nested . events [ 0 ] . nestedLayer . users_$ . length , 1 ) ;
8669
+ assert . equal ( res . nested . events [ 0 ] . nestedLayer . users_$ [ 0 ] . name , 'test' ) ;
8670
+
8671
+ res = res . toObject ( { virtuals : true } ) ;
8672
+ assert . equal ( res . nested . events [ 0 ] . nestedLayer . users_$ . length , 1 ) ;
8673
+ assert . equal ( res . nested . events [ 0 ] . nestedLayer . users_$ [ 0 ] . name , 'test' ) ;
8674
+ } ) ;
8675
+ } ) ;
8630
8676
} ) ;
0 commit comments