【发布时间】:2018-11-20 06:59:57
【问题描述】:
我正在做一个从 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));
它在上面失败了,说“插入的文档无效:键不能包含\”。\“:在键中”。 我知道在密钥中使用这些字符不是一个好习惯,但是由于这段代码使用 MongoClient 在 php5.6 中工作,我希望在迁移到 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:
我的一部分错误在于没有一次提供所有详细信息。我做了一个 json_decode 以在插入到 mongo 之前转换为本机 php 数组。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
你现在为什么不使用
MongoClient?您似乎是记录不佳的驱动程序安装过程的另一个受害者。它分为“两个”部分。第二部分在这里:MongoDB PHP Library -
好的..谢谢..让我试试
-
使用 MongoDB\Client 后,我仍然无法插入上述格式的文档。它仍然说 Invalid document for insert: keys cannot contain \".\": .....
-
你的代码是?因为我在这里没有看到任何代码,而且我也没有坐在你的办公桌前。 Edit your question 并实际显示您在做什么以及在哪里不起作用。就个人而言,我认为将这些用作“关键”名称是一个非常糟糕的主意,而您实际上应该将其转换为对象数组,例如
{ "url": ..., "value": ... } -
已编辑.. 我知道在密钥中使用这些字符不是一个好习惯,但是由于这段代码使用 MongoClient 在 php5.6 中工作,我希望尽可能减少更改迁移到 php7 时。
标签: php json mongodb mongodb-query php-7