我想打印数据从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"项,然后从逻辑上确定要添加到哪个数组中。
希望这些添加的行可以给你一些指针,告诉你如何更有效地编写剩下的代码。