MongoDB:$过滤多个数组

时间:2016-05-09 13:17:39

标签: mongodb

我的收藏品如下:

{
   _id: 0,
   items: [
     { item_id: 43, quantity: 2, price: 10 },
     { item_id: 2, quantity: 1, price: 240 }
   ],
   T: [
     { item_id: 2993, quantity: 3, price: 110 },
     { item_id: 90103, quantity: 4, price: 5 },
     { item_id: 398, quantity: 1, price: 300 }
    ]
}
{
   _id: 1,
   items: [
     { item_id: 23, quantity: 3, price: 110 },
     { item_id: 103, quantity: 4, price: 5 },
     { item_id: 38, quantity: 1, price: 300 }
   ],
   T: [
     { item_id: 23, quantity: 3, price: 110 },
     { item_id: 103, quantity: 4, price: 5 },
     { item_id: 38, quantity: 1, price: 300 }
     ]
}
{
    _id: 2,
    items: [
       { item_id: 4, quantity: 1, price: 23 }
    ],
   T: [
     { item_id: 203, quantity: 3, price: 110 },
     { item_id: 003, quantity: 4, price: 5 },
     { item_id: 398, quantity: 1, price: 300 }
     ]
}

我想以item> = 100返回items数组中的所有项目。这可以通过以下方式完成:

   $project: {
         items: {
            $filter: {
               input: "$items",
               as: "item",
               cond: { $gte: [ "$$item.price", 100 ] }
            }
         }
      }

如何将此表达式扩展到$filter数组上的itemsT数组中所有价格> = 100的元素?

1 个答案:

答案 0 :(得分:1)

您可以在同一个items中同时包含T$project字段,每个字段都有自己的$filter

db.test.aggregate([
    {$project: {
        items: {
            $filter: {
               input: "$items",
               as: "item",
               cond: { $gte: [ "$$item.price", 100 ] }
            }
        },
        T: {
            $filter: {
               input: "$T",
               as: "t",
               cond: { $gte: [ "$$t.price", 100 ] }
            }
        }
    }}
])