2013-04-14 120 views

回答

0

MongoID支持__toString。如果將其作爲字符串進行投射,或直接撥打__toString,則會將該值轉換爲字符串。

+0

我知道,但它意味着我必須要經過整個結果:(這是我會喜歡避免 – user1016265

0

我不相信有。

MongoDB以BSON文檔的形式輸入和輸出其字段採用此特定格式的格式。

這是你不能改變的東西。

0

您可以遍歷查詢結果並將所有MongoId對象轉換爲字符串。如果從MongoCollection :: findOne()給出一個結果數組,或者從MongoCollection :: find()給出一個MongoCursor結果,下面的函數將轉換所有的ids。

function convert_mongoid_to_string(& $mongo_object) 
{ 
    foreach($mongo_object as $mongo_key=>$mongo_element) 
    { 
     if(is_array($mongo_element)||is_object($mongo_element)) 
     { 
      if(get_class($mongo_element) === "MongoId") 
      { 
       //cast the object to the original object passed by reference 
       $mongo_object[$mongo_key]=(string)$mongo_element; 
      } 
      else 
      { 
       //recursively dig deeper into object looking for MongoId's 
       convert_mongoid_to_string($mongo_element); 
      } 
     } 
     else 
     { 
      //is scalar so just continue 
      continue; 
     } 
    } 
    return $mongo_object; 
} 
+0

感謝您的解決方案,這對我來說是完全清楚的,但我有搜索數據庫方面的解決方案,似乎這是不可能的。 – user1016265

0

我需要MongoIds是javascript/json(客戶端)友好,所以我想透明地轉換多個mongoIds。我找不到任何內置的功能來實現這一點,但有以下解決方案上來:

<?php 
function strToMongoIdObj(Array $_ids) { 
    return array_map(function($id) { 
      return new MongoId($id); 
     }, $_ids); 
} 

function mongoIdToStr(MongoCursor $cursor) { 
    $rs = array(); 
    foreach ($cursor as $doc) { 
     $doc['_id'] = (string)$doc['_id']; 
     $rs[] = $doc; 
    } 
    return $rs; 
} 

$_ids = array("522dbdd29076fde9057bb5ed", 
       "522dbf229076fdeb053f5b7b"); 

$m = new MongoClient(); 
$cursor = $m->db->col 
    ->find(array('_id' => array('$in' => strToMongoIdObj($_ids)))); 

print_r(mongoIdToStr($cursor)); 
相關問題