个月具体查询Mongodb和laravel

问题描述:

我正在与laravel molequentmongoDb和我想写一个查询比较两个日期之间的当前月份。 假设我有start_dateend_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) 
      ) 
     ) 
    )); 
});