蒙哥查询其子项必须与查询匹配的数组的文档

时间:2018-08-28 19:46:53

标签: mongodb aggregation-framework

我正在尝试使用mongo聚合框架编写查询。 我要实现的是选择一个月前所有货物已交付的订单

目前,我可以选择至少一个月前已交付“至少一件”的订单。

这就是我所拥有的:

User-Agent

如何更改我的查询,以仅选择一个多月前已交付所有货物的订单?

1 个答案:

答案 0 :(得分:0)

您可以使用$map为每个shipment应用条件,然后在$allElementsTrue内使用$expr来检查所有这些元素是否匹配:

db.shop_orders.aggregate([
    {
        $match: { shipments: { $exists: true, $ne: [] } }
    },
    {
        $match: {
            $expr: {
                $allElementsTrue: {
                    $map: {
                        input: "$shipments",
                        as: "shipment",
                        in: {
                            $and: [
                                { $eq: [ "$$shipment.status", "Delivered" ] },
                                { $lte: [ "$$shipment.deliveredAt", new Date("2018-07-28") ] }
                            ]
                        }
                    }
                } 
            }
        }
    }
])