2015-05-30 115 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 
);