Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在使用php mongo执行命令时,显示错误“exception:can't have.in field names”,错误代码:16722_Javascript_Php_Mongodb_Execute - Fatal编程技术网

Javascript 在使用php mongo执行命令时,显示错误“exception:can't have.in field names”,错误代码:16722

Javascript 在使用php mongo执行命令时,显示错误“exception:can't have.in field names”,错误代码:16722,javascript,php,mongodb,execute,Javascript,Php,Mongodb,Execute,我正在尝试使用php mongo执行命令运行一组java脚本和更新命令: $pSsId = '123456789'; $pUid = 14; $pRowID = '6fce077519d838bb8ed401448dae6e3a'; $pKey = 'name'; $pValue = 'K

我正在尝试使用php mongo执行命令运行一组java脚本和更新命令:

$pSsId                      = '123456789';
$pUid                       = 14;
$pRowID                     = '6fce077519d838bb8ed401448dae6e3a';
$pKey                       = 'name';
$pValue                     = 'King Kobra';
$response                   = $db()->execute("
        function(pSsid, pUid, pRowid, pKey, pValue){
            udocs    = db.VizSpreadsheet.findOne({'_id' : pSsid, 'data.uid' : pUid  }).data; 
            posU     = udocs.map(function(d) { return d.uid; }).indexOf(pUid);
            posR     = udocs[posU].rows.map(function(r) { return r.row_id; }).indexOf(pRowid);

            var setCriteria = {};
            setCriteria['_id'] = pSsid;
            setCriteria['data.uid'] = pUid;

            var setObject = {};
            setObject['data.'+posU+'.'+'rows'+'.'+posR+'.'+pKey] = pValue;

            db.VizSpreadsheet.update(
                {
                    setCriteria
                },
                {
                    '$set': setObject
                }
            );
        }", array($pSsId, $pUid, $pRowID, $pKey, $pValue));
但结果是错误的

Array ( [errmsg] => exception: can't have . in field names [data.1.rows.0.2#12#07337187ee7e48f92ed1689b22d7ed77] at src/mongo/shell/collection.js:155 [code] => 16722 [ok] => 0 ) 
集合将如下所示

"_id" : "123456789",
"data" : [ 
    {
        "uid" : 12,
        "rows" : [ 
            {
                "row_id" : "8979afefedb42aa8c62e9baa83e35ba0",
                "updated_by" : "12",
                "updated_at" : "1428644989",
                "name" : "AAAAAAAAAAA"
            }, 
            {
                "row_id" : "7415f767c62a84173d1dcf82ad1d809d",
                "updated_by" : "12",
                "updated_at" : "1428644989",
                "name" : "BBBBBBBBBBBBB" 
            }
        ]
    }, 
    {
        "uid" : 14,
        "rows" : [ 
            {
                "row_id" : "21b1120811cfe893486e9e9afbebb660",
                "updated_by" : "12",
                "updated_at" : 1428644989,
                "name" : "CCCCCCCCCC"
            }, 
            {
                "row_id" : "6fce077519d838bb8ed401448dae6e3a",
                "updated_by" : "12",
                "updated_at" : 1428644841,
                "names" : "DDDDDDDDDDD"
            }
        ]
    }
我尝试的是更新uid=14行数组中第二个元素的名称字段。数据由“$set”方法更新,并指定javascript代码查找的元素位置

相同的代码在shell中成功执行。
但在php中,它无法检测位置运算符。

正如错误消息所说,您不能使用。数据中的点。 尝试用以下内容分隔“子字段”:例如:

setObject['data:'+posU+':'+'rows'+':'+posR+':'+pKey]=pValue