Javascript 在使用php mongo执行命令时,显示错误“exception:can't have.in field names”,错误代码:16722
我正在尝试使用php mongo执行命令运行一组java脚本和更新命令: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
$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