javascript — при использовании команды выполнения php mongo с ошибкой & quot; исключение: не может иметь. в именах полей & quot; и код ошибки: 16722

Я пытаюсь запустить набор сценариев Java и команду обновления с помощью команды php mongo execute:

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

Тот же код успешно выполнен в оболочке.
Но в php он не может обнаружить оператор позиции.

0

Решение

Как говорится в сообщении об ошибке, вы не можете использовать . (точки) в ваших данных.
Попробуйте отделить ваши подполя с помощью : например:

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]