2015-05-30 156 views
1

我有以下蒙戈彙總查詢:蒙戈彙總查詢作用不是PHP蒙戈查詢

db.getCollection('datas').aggregate(
    { 
     "$match":{ 
      "payload.category_ids":ObjectId("5502b04bee60fc1ed06e2fa4"), 
      "time":{ "$gte":new Date(2015,4,22) } 
     } 
    }, 
    { 
     "$group":{ 
      _id: "$user_id", 
      num_use: {"$sum":1} 
     } 
    }, 
    { 
     "$sort":{"num_use":-1} 
    }, 
    { 
     "$match": { 
      'num_use':{"$gte":10} 
     } 
    } 
) 

對此我試圖變成一個PHP蒙戈查詢像這樣:

$topUserCat = $datas->aggregate(
    array(
     array('$match'=> 
      array(
       'payload.category_ids'=>new MongoId($category_id), 
       'time'=>array('$gte'=>new MongoDate(strtotime('-1 week'))) 
      ) 
     ) 
    ), 
    array(
     '$group'=>array(
      '_id'=>'$user_id', 
      'num_use'=>array('$sum'=>1) 
     ) 
    ), 
    array(
     '$match'=>array(
      "num_use"=>array('$gte'=>10) 
     ) 
    ) 
); 

沒有最後的匹配,這個查詢在PHP中起作用。然而,最後的匹配在頂部的Mongo查詢中起作用,所以我覺得我錯過了PHP查詢中的某些東西。我目前得到的錯誤是例外:管道元素0不是一個對象」

回答

0

我不能說,如果這是唯一的錯誤 - 但你的array s爲不能正確嵌套:

$topUserCat = $datas->aggregate(
    array( // <------------------- starts here 
     array('$match'=> 
      ... 
     ) 
    ),  // <------------------- ends here 
    array(
     '$group'=> 
      ... 
    ), 
    array(
     '$match'=> 
      ... 
    ) 
); 

應該是:

$topUserCat = $datas->aggregate(
    array( // <------------------- starts here 
     array('$match'=> 
      ... 
     ), 
     array(
      '$group'=> 
       ... 
     ), 
     array(
      '$match'=> 
       ... 
     ) 
    )  // <------------------- ends here 
);