2015-04-11 1 views
0

Я пытаюсь запустить набор скриптов java и команду обновления, используя команду php mongo execute:При использовании команды php mongo execute, отображающей ошибку «exception: not have have in in names» и код ошибки: 16722

$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" 
      } 
     ] 
    } 

Что Я пытаюсь обновить поле «имя» второго элемента в массиве «rows» для «uid» = 14. Данные обновляются с помощью метода «$ set» и указав позицию элемента, которая находится по коду javascript.

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

ответ

0

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

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

Смежные вопросы