流水线化Mongo aggeregation框架中的多个unwinds

时间:2013-07-05 22:36:53

标签: mongodb mongoid

我有一个有趣的用例,我正在使用它需要我在两个数组类型上应用Mongo的$ unwind运算符(这是mongo文档中的一个属性)

这是一个我希望过滤2个枚举类型的例子 $ host.config.storageDevice.scsiLun - enum(“ssd”,“disk1”,“disk2”) $ host.config.storageDevice.scsiLun.capacity.block - 范围(1000-100000)

我可以在单个聚合管道中展开多个运算符并对其进行过滤

               db["XXXXXXX"].aggregate( { $unwind : { "$host.config.storageDevice.scsiLun", "$host.config.storageDevice.scsiLun.capacity.block" } }, 
                               { $match : { "host.config.storageDevice.scsiLun.lunType" : "cdrom"  , "host.config.storageDevice.scsiLun.capacity.block" : { $gte : 60000 } , "managedObject" : "host" } } , 
                               { $project : { "host.name" : 1 , "host.config.storageDevice.scsiLun.devicePath" : 1 , "host.config.storageDevice.scsiLun.capacity.blockSize" : 1 , "host.config.storageDevice.scsiLun.capacity.block" : 1 , "host.config.storageDevice.scsiLun.ssd" : 1 , "host.config.storageDevice.scsiLun.uuid" : 1 , "host.config.storageDevice.scsiLun.lunType" : 1 , "_id" : 0  }} )

OR

我可以将复合聚合操作单元的结果链接到另一个聚合单元

               db["XXXXXXX"].aggregate( { $unwind : "$host.config.storageDevice.scsiLun" }, 
               { $match : { "host.config.storageDevice.scsiLun.lunType" : "cdrom"  , "managedObject" : "host" } } , 
               { $project : { "host.name" : 1 , "host.config.storageDevice.scsiLun.devicePath" : 1 , "host.config.storageDevice.scsiLun.capacity.blockSize" : 1 , "host.config.storageDevice.scsiLun.capacity.block" : 1 , "host.config.storageDevice.scsiLun.ssd" : 1 , "host.config.storageDevice.scsiLun.uuid" : 1 , "host.config.storageDevice.scsiLun.lunType" : 1 , "_id" : 0  }},
               { $unwind : "$host.config.storageDevice.scsiLun.capacity.blockSize" },
               { $match : { "host.config.storageDevice.scsiLun.capacity.blockSize" : { $gte : 8000000 } } },
               { $project : { "host.name" : 1 , "host.config.storageDevice.scsiLun.devicePath" : 1 , "host.config.storageDevice.scsiLun.capacity.blockSize" : 1 , "host.config.storageDevice.scsiLun.capacity.block" : 1 , "host.config.storageDevice.scsiLun.ssd" : 1 , "host.config.storageDevice.scsiLun.uuid" : 1 , "host.config.storageDevice.scsiLun.lunType" : 1 , "_id" : 0  }} 

0 个答案:

没有答案