2016-04-02 1 views
0

Пытаясь исправить документы в RavenDbRavenDb HTTP Заделка

$a = array('Patches' => array('pref_roles' => "1,2,3"), 
       'Key' => "Users/".$user_id, 
       'Method' => 'Patch'     
); 

{ "Патчи": { "pref_roles": "1,2,3"}, "Key": "Пользователи/4", "Метод ":" Патч "}

$input = json_encode($input); 
$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_CUSTOMREQUEST => 'POST', 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_POSTFIELDS => $input, 
    CURLOPT_URL => 'http://localhost:8080/databases/om/bulk_docs' 
)); 
$resp = curl_exec($curl); 

Патч никогда не проходит. Где я иду не так?

Редактировать.

Добавлен в 'сценарии'

$a = array('Patch' => array('Script' => 'this.natio = '.$natio.''), 
      'Key' => 'Users/'.$user_id, 
      'Method' => 'Patch'); 

Я отправляю

CURLOPT_CUSTOMREQUEST => 'POST', 

к этому URL:

CURLOPT_URL => 'http://localhost:8080/databases/om/bulk_docs' 

С помощью этих сообщений об ошибке:

Array 
(
    [Url] => /databases/om/bulk_docs 
    [Error] => System.Exception: Error reading RavenJArray from JsonReader. Current JsonReader item is not an array: StartObject 
    at Raven.Json.Linq.RavenJArray.Load(JsonReader reader) 
    at Raven.Database.Server.Controllers.RavenBaseApiController.<ReadJsonArrayAsync>d__11.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Raven.Database.Server.Controllers.DocumentsBatchController.<BulkPost>d__8.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__3`1.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext() 
) 

Играли немного, чтобы посмотреть, смогу ли я найти рабочее решение, но это не получилось.

ответ

0

Данные команды исправления таким образом требуют передачи фактических операций. См.: http://ravendb.net/docs/article-page/2.5/csharp/http-api/http-api-single

Предлагаю вам перейти со сценарием с использованием EVAL.

$a = array('Patch' => ('Script' => "this.pref_roles = [1,2,3["), 
       'Key' => "Users/".$user_id, 
       'Method' => 'Patch'     
); 
Смежные вопросы