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


php: query mongodb embedded documents into an array

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

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

你能证明你实际上可以从这个文档中获得除了嵌入的文档数据以外的所有信息吗?在循环内做一个var_dump($document)

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

旁注:您还应该使用findOne而不是find()

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