我的数据库结构
{
"Author_Name" : "mukund",
"Quote_Details" : [
{
"Quote_Text" : "Lost in the woods",
"Quote_Catagory" : "Something",
"Quote_Time" : "systime",
"Occassion" : "some time",
"Said_TO" : "somebody"
},
{
"Quote_Text" : "Miles to go before i sleep",
"Quote_Catagory" : "Nothing",
"Quote_Time" : "besttime",
"Occassion" : "i dont know",
"Said_TO" : "Nobody"
}
],
"_id" : ObjectId("535f6dc8b8082fd3f80dea0f")
}
我的php代码
$query = $collection->find(array("Quote_Details.Quote_Text" => new MongoRegex("/^$q/i"),"Author_Name" => "$author"));
$json2 = array();
foreach($query as $result)
{
//echo $result['Quote']."n" ;
$json2[]= array('val'=>$result["Author_Name"],
'value'=>$result["Quote_Details.Quote_Text"]);
}
echo json_encode($json2);
我认为它是有效的,因为当我输入正确的值时,文本框中只有"value"的值为null。当提供q为"迷失在森林中"和author_name为"mukund"时,我得到了正确的作者名称,但在"value"的位置,它显示为空
需要注意的一点是,如果我为q设置任何其他值,则根据需要不会获得输出
控制台输出为
[{"val":"mukund","value":null}]
请告诉我我在这里做错了什么
因此,代码的问题在于,当您实际需要使用PHP表示法时,您仍然试图使用JSON表示法来访问内部文档。由于您的PHP表示法与任何内容都不匹配,因此会得到null结果。
但实际上,这不是您想要做的,因为您正在代码中对结果进行后期处理。你本可以很容易地完成这个服务器端:
$result = $collection->aggregate(array(
array(
'$match' => array(
'Quote_Details.Quote_Text' => MongoRegex("/^$q/i"),
'Author_Name' => "$author"
)
),
array(
'$unwind' => '$Quote_Details'
),
array(
'$project' => array(
'_id' => 0,
'val' => '$Author_Name',
'value' => '$Quote_Details.Quote_Text'
)
)
));
echo json_encode( $result['result'], JSON_PRETTY_PRINT ) . "n";
因此,现在,如图所示,您不再需要迭代结果,因为您只需当场编码,并且您已经将结果重新调整为您想要的结果。
根据我的理解,您的集合是多维的(文档和子文档(。因此,您可以通过以下代码获得结果中的"值":
而不是使用:
$result["Quote_Details.Quote_Text"]
在foreach循环中
改为使用这个:
$result["Quote_Details"]["Quote_Text"]
上面的代码将输出为:
[{"val":"mukund","value":"Lost in the woods"}]