我正在处理从php5.6到7.x的迁移项目,其中我有一个带有特殊字符的json。如何将此插入mongodb?
在php5.6中,我使用MongoClient作为驱动程序,在内部转换特殊字符,因此我能够插入文档。但是我无法在php7中实现同样的功能。我使用MongoDB \ Driver \ Manager连接到Mongodb。
编辑:
我有一套api来自另一个系统,格式如下
$content_array=
{
"context": {
"extensions": {
"http://id.tincanapi.com/extension/platform": "web",
"http://id.tincanapi.com/extension/browser-info": "Mozilla/5.0",
"http://id.tincanapi.com/extension/host-session-id": "4e320015"
}
}
}
$dbconnection = new MongoDB\Client($uri);
$db = $dbconnection->$dbname;
$collection = $db->$dbcoll;
$collection->insertOne(json_decode($content_array));
上面没有说,"无效的插入文件:密钥不能包含\"。\":在密钥"中。 我理解在密钥中使用这些字符并不是一个好习惯,但是由于这段代码在php5.6中使用MongoClient工作,我希望在迁移到php7时尽可能减少更改。
编辑2:
在php5.6中运行的代码
$dbconnection = new \MongoClient($dbhost, $options);
if (!empty($dbconnection)) {
$db = $dbconnection->selectDB($dbname);
$collection = $db->selectCollection($dbcoll);
$status = 0;
if (!empty($collection)) {
$collection->insert(json_decode($content_array));
$status = 1;
}
EDIT3:
我的一部分错误是没有立即给出所有细节..我在插入mongo之前做了一个json_decode转换为原生php数组。
任何帮助将不胜感激。感谢。
答案 0 :(得分:0)
总结:尽管各种版本的服务器都将插入带有此类字段名称的文档,但直到3.6(根据手册)才取消了此类字段名称的限制。尽管对手册进行了更改,但MongoDB驱动程序正式不支持插入此类字段名称,并且可能直到服务器的某些将来版本实现转义方案(SERVER-30575)时才会提供。
在较旧版本的PHP驱动程序中未遇到该错误的原因是libmongoc直到1.6.0(CDRIVER-1341)才开始执行该限制。 PHP驱动程序1.2.x仍在使用libmongoc1.5.x。当我们碰到libmongoc 1.8.x时,该异常将首先出现在PHP驱动程序1.3.x中。