php:查询mongodb嵌入文档到数组中

时间:2015-06-02 01:54:36

标签: php arrays mongodb

我有一个需要查询的数据库,我需要将嵌入式文档的所有结果都放到数组中,这样我就可以将它们存储到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中?

1 个答案:

答案 0 :(得分:1)

我认为你的错误存在于其他地方,它可能更多的是关于返回零文档的查询,或者角色数据首先是一个空数组,或者角色数据不存在并且你有未定义的索引错误被抑制。

您能否证明您可以从嵌入式文档数据中获取本文档中的所有信息?在循环中做var_dump($document)

我怀疑你的脚本可能甚至没有进入foreach循环。您可能需要检查mongodb查询错误,或尝试修改或删除查询作为测试。

旁注:你也应该使用findOne而不是find()

$document = $collection->findOne($query);
$_SESSION['object_permissions'] = $document['roles'];