我有以下PHP数组:
array (size=9)
'script_desc' => string 'Test Script' (length=21)
'script_date' => string 'May 11 2016 15:40:48' (length=20)
'log_date' => string 'May 12 2016 09:17:58' (length=20)
'name' => string 'test name' (length=2)
'type' => string 'location_status' (length=15)
'status' => boolean false
'test.server.1' =>
array (size=1)
'packages' =>
array (size=2)
'package1' =>
array (size=4)
'package_name' => string 'package1' (length=10)
'current_version' => string 'package1-1.4.26-r1' (length=20)
'latest_version' => string '1.4.26-r1' (length=9)
'package_status' => string '=' (length=1)
'package2' =>
array (size=4)
'package_name' => string 'package2' (length=14)
'current_version' => string 'package2-0.31.1-r1' (length=24)
'latest_version' => string '0.31.1-r2' (length=9)
'package_status' => string '<' (length=1)
'test.server.2' =>
array (size=1)
'packages' =>
array (size=2)
'package1' =>
array (size=4)
'package_name' => string 'package1' (length=16)
'current_version' => string 'package1-0.35.1-r0' (length=26)
'latest_version' => string '0.35.1-r0' (length=9)
'package_status' => string '=' (length=1)
'package3' =>
array (size=4)
'package_name' => string 'package3' (length=3)
'current_version' => string 'package3-5.3.2-r0' (length=33)
'latest_version' => string '5.3.2-r0' (length=8)
'package_status' => string '=' (length=1)
'_id' => float 5
这是我用来尝试将此数组插入到mongo数据库中的代码:
68 function add_history_record($location)
69 {
70 $m = new MongoClient("mongodb://10.1.1.1:27017");
71 $db = $m->mymongodb;
72 $collection = $db->mycollection;
73 $location['_id'] = getNextSequence("locationid");
74 $cursor = $collection->insert($location);
75 var_dump($cursor);
76 }
我收到的错误消息是这样的:
致命错误:消息为“”的未捕获异常'MongoException'。不允许输入键:第74行的/var/www/html/mongotestapp/inventory.php中的test.server.1'
到目前为止,我已经尝试过:
向我自己证明我可以用“。”键。在其中,我使用了robomongo添加了以下文档:
{
"_id" : ObjectId("573483ae3747106e60a087f9"),
"test.server.1.1" : 123
}
它将文档保存在我的收藏中没有问题。我不确定我的PHP代码中缺少什么...有什么建议吗?
编辑1:
我将代码更改为包括以下内容:
68 function add_playbook_history_record($location)
69 {
70 $m = new MongoClient("mongodb://10.1.1.1:27017");
71 $db = $m->phonesys;
72 $collection = $db->inventory;
73 $location['_id'] = getNextSequence("locationid");
74 printf($location['_id']);
75 echo "<pre>".json_encode($location)."</pre>";
76 $cursor = $collection->insert($location, array("w"=>1));
77
78 // $cursor = $collection->insert($location, array("w" => 0,"j"=>true));
79 }
我可以看到系统正在生成合法的位置ID。我还获取了json格式的输出,并在jsonlint中进行了测试,以确保其格式正确,等等。最后,我开始使用write选项。当我启用第78行时,系统不会返回任何错误消息,但是记录不会添加到数据库中。但是,当我设置w = 1时,它将失败,并显示有关该键的相同错误消息。
我一直在研究不同的选项,并阅读以下内容:http : //php.net/manual/en/mongo.writeconcerns.php,但是如果您有任何建议,我都会耳熟能详。
我没有任何分片或其他服务器。现在只有一台主要的mongodb服务器正在运行。
谢谢。
.
错误消息告诉您,您的键名中不能包含a 。
MongoDB直接接受此功能,但是您将无法像查询中一样针对这些字段名称进行查询,该点具有特殊含义:
// document
{foo:{bar:"baz"}}}
// query
db.col.find( { 'foo.bar' : 'baz' } );
所有官方驱动程序都防止.
在键名中放置(和其他字符),因此PHP驱动程序正确拒绝了此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句