我希望使用单个游标将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
}
]
}
}
答案 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;使用单个查询返回的术语,然后在逻辑上确定要添加到哪个数组。
希望其中一些添加的行可能会为您提供一些指导,说明如何更有效地编写其他需要在此处执行的操作。