@@ -162,6 +162,62 @@ module.exports = function() {
162
162
} ) ;
163
163
} ) ;
164
164
} ) ;
165
+
166
+ it ( 'supports $lookup' , function ( done ) {
167
+ var users = [
168
+ { type : 'json0' , id : 'user1' , v : 1 , data : { name : 'Alice' , age : 30 } } ,
169
+ { type : 'json0' , id : 'user2' , v : 1 , data : { name : 'Bob' , age : 25 } }
170
+ ] ;
171
+ var orders = [
172
+ { type : 'json0' , id : 'order1' , v : 1 , data : { userId : 'user1' , item : 'Book' } } ,
173
+ { type : 'json0' , id : 'order2' , v : 1 , data : { userId : 'user2' , item : 'Pen' } } ,
174
+ { type : 'json0' , id : 'order3' , v : 1 , data : { userId : 'user1' , item : 'Notebook' } }
175
+ ] ;
176
+ var query = {
177
+ $aggregate : [
178
+ { $lookup : {
179
+ from : 'users' ,
180
+ localField : 'userId' ,
181
+ foreignField : '_id' ,
182
+ as : 'userDetails'
183
+ } } ,
184
+ { $unwind : '$userDetails' } ,
185
+ { $project : {
186
+ _id : 1 ,
187
+ item : 1 ,
188
+ userName : '$userDetails.name' ,
189
+ userAge : '$userDetails.age'
190
+ } } ,
191
+ { $sort : { userName : 1 , item : 1 } }
192
+ ]
193
+ } ;
194
+
195
+ var db = this . db ;
196
+ async . series ( [
197
+ function ( cb ) {
198
+ async . each ( users , function ( user , innerCb ) {
199
+ db . commit ( 'users' , user . id , { v : 0 , create : { } } , user , null , innerCb ) ;
200
+ } , cb ) ;
201
+ } ,
202
+ function ( cb ) {
203
+ async . each ( orders , function ( order , innerCb ) {
204
+ db . commit ( 'orders' , order . id , { v : 0 , create : { } } , order , null , innerCb ) ;
205
+ } , cb ) ;
206
+ } ,
207
+ function ( cb ) {
208
+ db . query ( 'orders' , query , null , null , function ( err , results , extra ) {
209
+ if ( err ) return cb ( err ) ;
210
+ expect ( results ) . eql ( [ ] ) ;
211
+ expect ( extra ) . eql ( [
212
+ { _id : 'order1' , item : 'Book' , userName : 'Alice' , userAge : 30 } ,
213
+ { _id : 'order3' , item : 'Notebook' , userName : 'Alice' , userAge : 30 } ,
214
+ { _id : 'order2' , item : 'Pen' , userName : 'Bob' , userAge : 25 }
215
+ ] ) ;
216
+ cb ( ) ;
217
+ } ) ;
218
+ }
219
+ ] , done ) ;
220
+ } ) ;
165
221
} ) ;
166
222
167
223
describe ( 'filtering on special Share properties' , function ( ) {
0 commit comments