【问题标题】:php: query mongodb embedded documents into an arrayphp:将mongodb嵌入文档查询到数组中
【发布时间】:2015-06-02 01:54:36
【问题描述】:

我有一个需要查询的数据库,我需要将嵌入文档中的所有结果放入一个数组中,以便将它们存储到 php.ini 中的变量中。这是 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 中?

【问题讨论】:

    标签: php arrays mongodb


    【解决方案1】:

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

    您能否证明您实际上可以从该文档中获取除嵌入文档数据之外的所有信息?在循环内执行var_dump($document)。

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

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

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

    【讨论】:

    • 是的,先生!这是其他地方的错误,没有返回任何文件。使用 find() 而不是 findOne() 是否会对性能产生影响,或者当我只想返回 1 个文档时,这是一种最佳做法吗?
    猜你喜欢
    • 2021-08-07
    • 2015-02-06
    • 2015-08-30
    • 2017-01-21
    • 2021-03-24
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多