繁体   English   中英

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'];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM