我使用php创建了一个mongoDB集合: -
$document = array(
'id' => 5,
'UNAME' => 'abc',
'NAME' => 'def',
'EMAIL' => 'def@gmail.com',
'QUALIFICATION' => array(
'DEGREE' => '',
'UNIVERSITY' => ''
),
'POST' => array(
),
);
$collection->insert($document);
我有这个mongodb集合: -
{
"_id" : "5",
"UNAME" : "abc",
"NAME" : "def",
"EMAIL" : "def@gmail.com",
"QUALIFICATION" : {
"DEGREE" : "",
"UNIVERSITY" : ""
},
"POST" : [ ]
}
{
"_id" : "2",
"UNAME" : "uvw",
"NAME" : "xyz",
"EMAIL" : "xyz@gmail.com",
"QUALIFICATION" : {
"DEGREE" : "",
"UNIVERSITY" : ""
},
"POST" : [ ]
}
我将查询用作$cursor = $collection->find(array('UNAME'=>'uvw'));
$extract = iterator_to_array($cursor);
现在问题出在这里。 要使用UNAME = uvw检索文档,我强制使用
$u = $extract[2]['UNAME'];
相反,如果我使用$u = $extract['UNAME'];
它显示错误为Notice: Undefined index: UNAME
我有没有办法在不使用' index'(我猜这是正确的词)的情况下获取这些数据?
答案 0 :(得分:0)
首先,由于您的查询是UNAME
,为什么必须在回复中搜索UNAME
?在uvw
的所有回复中,Array
(
[2] => Array
(
[_id] => 2
[UNAME] => uvw
[NAME] => xyz
[EMAIL] => xyz@gmail.com
[QUALIFICATION] => Array
(
[DEGREE] =>
[UNIVERSITY] =>
)
[POST] => Array
(
)
)
)
的值是不是很明显?
第二件事是iterator_to_array将返回包含数组中所有文档的数组,其中每个文档的键将是_id的值。 所以在你的情况下,响应将是
UNAME
因此,您必须使用$extract[2]['UNAME'];
use_keys
但是,您可以通过将值use_keys
传递给FALSE来更改此行为,其中$extract = iterator_to_array($cursor, FALSE)
指示是否将迭代器元素键用作索引。
所以,Array
(
[0] => Array
(
[_id] => 2
[UNAME] => uvw
[NAME] => xyz
[EMAIL] => xyz@gmail.com
[QUALIFICATION] => Array
(
[DEGREE] =>
[UNIVERSITY] =>
)
[POST] => Array
(
)
)
)
将返回索引从0开始的数组,如下所示。
UNAME
所以,现在您可以使用$extract[0]['UNAME'];
SELECT id, name FROM robots WHERE name LIKE '%robot 20%' ORDER BY id
了
希望这有帮助。