回声Mongo数据到类别与单一数据库点击在PHP


Echo Mongo Data into categories with single database hit in PHP

我想打印数据从mongodb到基于单个游标的特定字段的类别。我不是非常熟练的php,所以我有麻烦执行它。

下面是我得到的代码:
$mongo = new MongoClient();
          $cursor1 = $mongo->phone->users_new->find(array('step'=>'current'));
          $cursor1->sort(array('date_created'=>-1));
          $cursor2 = $mongo->phone->users_new->find(array('step'=>'web'));
          $cursor2->sort(array('date_created'=>-1));
          foreach($cursor1 as $a){
              foreach($a as $b=>$c){
                  $value = $c;
                  if($b == 'date_created'){
                      $value =  date('m/d/Y', $c->sec); 
                  }
                  $record[$b] = $value;
              }
              $result['records']['current'][]= $record;
          }
          foreach($cursor2 as $a){
              foreach($a as $b=>$c){
                  $value = $c;
                  if($b == 'date_created'){
                      $value =  date('m/d/Y', $c->sec); 
                  }
                  $record[$b] = $value;
              }
              $result['records']['web'][]= $record;
          }
          header("Content-Type: application/json");
          echo '<pre>'.json_encode($result, JSON_PRETTY_PRINT);

我想让数据像这样打印出来:

{
"records": {
    "web": [
        {
            "name": "bob",
            "age": 32
        }
    ],
    "current": [
        {
            "name": "jones",
            "age": 72
        }
    ]
  }
}

从您的代码中并不清楚您期望如何获得最终输出,主要是因为我们不知道您的文档是什么样子的,也不知道您当前的逻辑是如何产生这种输出的。但是我可以帮助你处理单个游标部分和一般逻辑。

这里真正需要的是一个 $or 条件,或者更好的是一个 $in 运算符,它的语法更短。只需选择"step"的两个查询值,然后区分要在代码中添加的数组:
# Single query and better syntax
$cursor = $mongo->phone->users_new->find(array( 
   'step' => array( '$in' => array( 'current', 'web' ) )
))->sort(array( 'date_created' => -1))
# Basically copying your block of code
foreach ( cursor as $a ) {
    foreach( $a as $b=>$c){
        $value = $c;
        if ( $b == 'date_created' ) {
            $value =  date('m/d/Y', $c->sec); 
        }
        $record[$b] = $value;
    }
    # But decide on the array based on content. If not 'current' it's 'web'
    if ( $a["step"] == 'current' ) {
        $result['records']['current'][]= $record;
    } else {
        $result['records']['web'][]= $record;
    }
}
# The rest of your code

所以基本上"step"是你选择的字段,它将出现在结果中。只需要求用单个查询返回"both"项,然后从逻辑上确定要添加到哪个数组中。

希望这些添加的行可以给你一些指针,告诉你如何更有效地编写剩下的代码。