我正在为mongo构建查询
db.dectar_rides.aggregate({$match:{ ride_status:{$in:["Completed"]}}},
{$group:{_id:"$user.name", email:{ $first: '$user.email'},total_viajes: {$sum:1}}}
);
但我希望按日期添加限制,然后它不起作用
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}}},
);
但如果我单独运行它,它可以正常运行:
db.dectar_rides.find({"booking_information.pickup_date": {$gte: new ISODate("2016-09-01T00:00:00Z"),
$lt : new ISODate("2016-10-31T23:59:59Z") }});
如何使$match
使用这些参数?
答案 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,如上所述。