将Echo Mongo数据分类到PHP中使用单个数据库命中

时间:2015-07-08 19:20:18

标签: php mongodb

我希望使用单个游标将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
        }
    ]
  }
}

1 个答案:

答案 0 :(得分:0)

从您的代码中可以清楚地看到您希望如何获得最终输出,主要是因为我们不知道您的文档是什么样的,或者您当前的逻辑是如何产生的。但是我可以用单光标部分和一般逻辑来帮助你。

这里你真正需要的是一个$or条件,或者更好的$in运算符,这是一种较短的语法。只需为&#34;步骤&#34;选择两个查询值。然后辨别要添加到代码中的数组:

# 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

所以基本上&#34;步骤&#34;是您选择的字段,它将出现在结果中。只要问&#34;两者&#34;使用单个查询返回的术语,然后在逻辑上确定要添加到哪个数组。

希望其中一些添加的行可能会为您提供一些指导,说明如何更有效地编写其他需要在此处执行的操作。