我有一个需要查询的数据库,我需要将嵌入式文档的所有结果都放到数组中,这样我就可以将它们存储到php中的变量中。这就是mongodb的记录:
{
"_id" : ObjectId("987654321"),
"roles" : {
"988434fe-9ac8-390f-abb4-18e4a0cc83fd" : 9,
"fc261c0f-7124-3c81-89e8-ecb33771fe4e" : 9
},
"groupType" : "PUBLIC_GROUP",
"name" : "Service Tech Role",
"type" : "usergroup"
}
我可以使用下面的PHP函数获取本文档中除嵌入文档数据之外的所有信息。
function getPerms()
{
$m = new MongoClient ("mongodb://localhost" );
$db = $m->test;
$collection = $db->roles;
$query = array( '_id' => $_SESSION['groupId'] );
$cursor = $collection->find( $query );
foreach ($cursor as $document) {
$_SESSION['object_permissions'] = $document["roles"];
}
}
我需要的是"角色"要在数组中设置的数据,如下所示:
988434fe-9ac8-390f-abb4-18e4a0cc83fd,9
fc261c0f-7124-3c81-89e8-ecb33771fe4e,9
将嵌入文档放入数组需要做些什么才能将它们作为会话变量存储在php中?
答案 0 :(得分:1)
我认为你的错误存在于其他地方,它可能更多的是关于返回零文档的查询,或者角色数据首先是一个空数组,或者角色数据不存在并且你有未定义的索引错误被抑制。
您能否证明您可以从嵌入式文档数据中获取本文档中的所有信息?在循环中做var_dump($document)
。
我怀疑你的脚本可能甚至没有进入foreach循环。您可能需要检查mongodb查询错误,或尝试修改或删除查询作为测试。
旁注:你也应该使用findOne而不是find()
$document = $collection->findOne($query);
$_SESSION['object_permissions'] = $document['roles'];