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



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

$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;

相关内容

最新更新