$匹配几个参数

时间:2016-11-01 16:21:19

标签: mongodb mongodb-query aggregation-framework

我正在为mongo构建查询

 db.dectar_rides.aggregate({$match:{ ride_status:{$in:["Completed"]}}},
                           {$group:{_id:"$user.name", email:{ $first: '$user.email'},total_viajes: {$sum:1}}}
                           );

enter image description here

但我希望按日期添加限制,然后它不起作用

 db.dectar_rides.aggregate({$match:{ ride_status:{$in:["Completed"]}, 
                                     booking_information.pickup_date: {$gte: new ISODate("2016-09-01T00:00:00Z"),
                                                                       $lt : new ISODate("2016-10-31T23:59:59Z") }}},
                           {$group:{_id:"$user.name", email:{ $first: '$user.email'},total_viajes: {$sum:1}}},
                           );

enter image description here

但如果我单独运行它,它可以正常运行:

db.dectar_rides.find({"booking_information.pickup_date": {$gte: new ISODate("2016-09-01T00:00:00Z"),
                                                          $lt : new ISODate("2016-10-31T23:59:59Z") }});

enter image description here

如何使$match使用这些参数?

1 个答案:

答案 0 :(得分:2)

您需要用引号括起嵌入字段。使用dot notation访问该字段时,您必须enclose the dotted name in quotes

db.dectar_rides.aggregate([
    { 
        "$match": { 
            "ride_status": "Completed", 
            "booking_information.pickup_date": {
                "$gte": new ISODate("2016-09-01T00:00:00Z"),
                "$lt": new ISODate("2016-10-31T23:59:59Z") 
            }
        }
    },
    {
        "$group": {
            "_id": "$user.name", 
            "email": { "$first": '$user.email' },
            "total_viajes": { "$sum": 1 }
        }
    },
]);

此外,对于查询数组,只有当您想要匹配指定值列表中的任何值但是当它只有一个值时才需要 $in 运算符你想要匹配的元素,你也可以使用隐含的 $eq oerator,如上所述。