如果文档的值为MongoId
对象的字段,它将返回到像http://dl.dropbox.com/u/7017985/Screenshots/26.jpg这样的PHP,有没有办法像简单字符串那样返回它而不是MongoId
对象
为什么需要它?因为我需要将结果发送到javascript浏览器端。我的文档有2-3个字段,它们是另一个文档的引用,它们保持为ObjectId
。
答案 0 :(得分:0)
MongoID支持__toString
。如果将其强制转换为字符串,或直接调用__toString
,则会将该值转换为字符串。
答案 1 :(得分:0)
我不相信有。
MongoDB以BSON文档的形式获取输入和输出,其ObjectId
字段采用此特定格式。
这是你无法改变的。
答案 2 :(得分:0)
您可以遍历查询结果并将所有MongoId对象转换为字符串。如果从MongoCollection :: findOne()获得单个结果数组,或者从MongoCollection :: find()获得MongoCursor结果,则下面的函数将转换所有id。
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;
}
答案 3 :(得分: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));