个月具体查询Mongodb和laravel
问题描述:
我正在与laravel molequent
mongoDb
和我想写一个查询比较两个日期之间的当前月份。 假设我有start_date
和end_date
,如果我在mysql中写的查询将是:个月具体查询Mongodb和laravel
select * from table where month(curdate()) between month(start_date) and month(end_date) ;
现在我必须写这个查询MongoDB中与laravel查询生成器。
答
您可能需要使用聚合框架来获取结果。考虑运行在蒙戈外壳为理念的示范如下管道,当然你需要有 实际领域,以取代虚拟字段:
var now = new Date(),
currentMonth = now.getMonth()+1,
pipeline = [
{
"$project": {
"field1": 1,
"field2": 1,
"start_date": 1,
"end_date": 1,
"start_month": { "$month": "$start_date" },
"end_month": { "$month": "$end_date" }
}
},
{
"$match": {
"start_month": { "$lte": currentMonth },
"end_month": { "$gte": currentMonth }
}
}
];
db.collection.aggregate(pipeline);
然后,您可以访问底层的原始MongoDB的集合为了使用聚合框架API:
$currentMonth = date("m");
$result = DB::collection('collectionName')->raw(function($collection) {
return $collection->aggregate(array(
array(
"$project"=> array(
"field1" => 1,
"field2" => 1,
"start_date" => 1,
"end_date" => 1,
"start_month" => array("$month" => "$start_date"),
"end_month" => array("$month" => "$end_date")
)
),
array(
"$match"=> array(
"start_month" => array("$lte" => $currentMonth),
"end_month" => array("$gte" => $currentMonth)
)
)
));
});