【问题标题】:RavenDb HTTP PatchingRavenDb HTTP 补丁
【发布时间】:2016-04-03 03:14:51
【问题描述】:

尝试在 RavenDb 中修补文档

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

{"Patches":{"pref_roles":"1,2,3"},"Key":"Users/4","Method":"Patch"}

$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',

到这个网址:

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()
)

玩了一会儿,看看我是否能找到可行的解决方案,但这并没有真正奏效。

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    以这种方式修补命令数据需要您通过实际操作。 看: 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'                
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2014-07-29
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多