如果文檔具有值爲MongoId
對象的字段,它將返回到類似http://dl.dropbox.com/u/7017985/Screenshots/26.jpg的php,有沒有什麼方法可以像簡單字符串那樣返回它,而不是如MongoId
對象那樣返回它。MongoDB將ObjectId轉換爲結果中的字符串
爲什麼我需要它?因爲我需要將結果發送到JavaScript瀏覽器端。我有2-3個字段的文件,這些文件是對另一個文件的引用,並保留爲ObjectId
。
如果文檔具有值爲MongoId
對象的字段,它將返回到類似http://dl.dropbox.com/u/7017985/Screenshots/26.jpg的php,有沒有什麼方法可以像簡單字符串那樣返回它,而不是如MongoId
對象那樣返回它。MongoDB將ObjectId轉換爲結果中的字符串
爲什麼我需要它?因爲我需要將結果發送到JavaScript瀏覽器端。我有2-3個字段的文件,這些文件是對另一個文件的引用,並保留爲ObjectId
。
MongoID支持__toString
。如果將其作爲字符串進行投射,或直接撥打__toString
,則會將該值轉換爲字符串。
我不相信有。
MongoDB以BSON文檔的形式輸入和輸出其字段採用此特定格式的格式。
這是你不能改變的東西。
您可以遍歷查詢結果並將所有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;
}
感謝您的解決方案,這對我來說是完全清楚的,但我有搜索數據庫方面的解決方案,似乎這是不可能的。 – user1016265
我需要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));
我知道,但它意味着我必須要經過整個結果:(這是我會喜歡避免 – user1016265