理解从PHP文件访问的JSON结果中的“_id”键。

时间:2013-09-06 11:31:41

标签: php mongodb getjson

PHP

$query = $myCollection->findOne(array("field2.sf2" => "value two"));
echo json_encode($query);

返回JSON对象

{"_id":{"$id":"5476854783473474578548"},"field1":"value one","field2":{"sf1":["av1","av2","av3"],"sf2":"value two"},"field3":"value three"}

发生了什么:

"_id":{"$id":"5476854783473474578548"}

我可以看到它是Document的"_id"键和值的表示,即:

"_id": ObjectId("5476854783473474578548")

但是有一些事情正在发生:

  • 该值变为sub document,即它以花括号
  • 包围
  • ObjectId正在被"$id"
  • 取代

我正在使用MongoDB,通过PHP文件访问,通过jQuery的getJSON()方法。

有没有gotcha's我需要注意这件事吗?

任何众所周知的“行业知识”提示可能对MongoDB新手有所帮助或进一步解释发生了什么?

1 个答案:

答案 0 :(得分:1)

在调用json_encode时,objectId没有被替换,只是序列化为字符串形式。

它的属性被取出,置于字符串化的JSON中并通过线路发送,然后在JQuery中,库将该字符串化JSON解析为您看到的对象。

没有数据丢失。

我能想到的唯一问题是MongoId的构造函数实际上没有把这个对象重新插入,它只假设一个十六进制的ObjectId(即5476854783473474578548http://www.php.net/manual/en/mongoid.construct.php