簡體   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