You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Couchbase文档数组元素达8个时抛出InvalidArgumentException异常求助

Couchbase数组元素达8个时调用MutateInAsync抛出InvalidArgumentException异常问题

环境信息

  • Couchbase版本:Couchbase Server Community Edition 7.2.2 build 6401
  • NuGet包:
<PackageReference Include="Couchbase.Extensions.Caching" Version="3.3.5" />
<PackageReference Include="Couchbase.Extensions.DependencyInjection" Version="3.4.15" />

用户文档结构(设备数组示例)

用户文档包含存储设备信息的数组,结构片段如下:

{
  "Devices": [
    {
      "ClientVersion": "#",
      "CreatedAt": "2025-02-20T01:43:09.195092+03:00",
      "CreatedBy": null,
      "DeletedAt": null,
      "DeviceId": "#",
      "Id": "c3d1e0e8-d817-4d63-b66b-9112a3676fd8",
      "Ip": "#",
      "IsMainDevice": true,
      "LastOtpVerificationDate": "2025-02-20T01:43:09.195092+03:00",
      "Model": "#",
      "OperatingSystem": "#",
      "OriginalDeviceId": "BA5393F0-D283-4422-A21C-CE4BB8FC95E5",
      "Platform": "#",
      "SystemVersion": "#",
      "UpdatedAt": null,
      "UpdatedBy": null,
      "Version": "#"
    },
    { ... }
  ]
}

异常情况

检测到新设备时会向数组添加元素,但当数组元素数量达到8个时,抛出以下异常:
Exception of type 'Couchbase.Core.Exceptions.InvalidArgumentException' was thrown.

该异常在测试/预发布/生产环境均会出现,但本地调试无法复现。

堆栈跟踪

at Couchbase.Core.Retry.RetryOrchestrator.RetryAsync(BucketBase bucket, IOperation operation, CancellationTokenPair tokenPair)
at Couchbase.KeyValue.CouchbaseCollection.MutateInAsync(String id, IEnumerable1 specs, MutateInOptions options) at Business.Services.UserPasswordService.VerifyOtpForRecoveryAsync(String partnerCode, OtpForPasswordRecoveryRequestDto dto) in /app/Business/Services/UserPasswordService.cs:line 186 at WebAPI.Controllers.V1.PasswordController.VerifyOtpForRecoveryAsync(OtpForPasswordRecoveryRequestDto dto) in /app/WebAPI/Controllers/V1/PasswordController.cs:line 38 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context)
at Infra.AspNetCore.Middlewares.RoleBasedAuthorizationMiddleware.Invoke(HttpContext context) in /app/Infra.AspNetCore/Middlewares/RoleBasedAuthorizationMiddleware.cs:line 59
at Infra.AspNetCore.Middlewares.RequestLoggerMiddleware.InvokeAsync(HttpContext context) in /app/Infra.AspNetCore/Middlewares/RequestLoggerMiddleware.cs:line 37
at WebAPI.Middlewares.SessionContextMiddleware.Invoke(HttpContext context) in /app/WebAPI/Middlewares/SessionContextMiddleware.cs:line 38
at Infra.AspNetCore.Middlewares.RequestInitializerMiddleware.InvokeAsync(HttpContext context) in /app/Infra.AspNetCore/Middlewares/RequestInitializerMiddleware.cs:line 30
at Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)
at Infra.AspNetCore.Middlewares.ExceptionHandlerMiddleware.InvokeAsync(HttpContext context) in /app/Infra.AspNetCore/Middlewares/ExceptionHandlerMiddleware.cs:line 43

相关代码

MutateInSpecBuilder modifyProperties(MutateInSpecBuilder specs)
{
      return _deviceService.CreateOrUpdateWithNoCommit(specs, user).Data;
}

var userCollection = await _collectionFactory.GetCollectionAsync(CollectionNames.Users);
await userCollection.MutateInAsync(user.Id, specs => modifyProperties(specs));


public ServiceResult<MutateInSpecBuilder> CreateOrUpdateWithNoCommit(MutateInSpecBuilder specs, User user)
{
  MutateInSpecBuilder modifyProperties(MutateInSpecBuilder spec)
  {
      var now = DateTimeOffset.Now;

      var registeredDevice = user.Devices.SingleOrDefault(s => s.OriginalDeviceId == originalDeviceId);
      if (registeredDevice.IsNull())
      {
          for (int i = 0; i < user.Devices.Count; i++)
          {
              spec.Replace($"{nameof(User.Devices)}.[{i}].{nameof(UserDevice.IsMainDevice)}", false);
              spec.Replace($"{nameof(User.Devices)}.[{i}].{nameof(UserDevice.DeletedAt)}", now);
              user.Devices[i].IsMainDevice = false;
              user.Devices[i].DeletedAt = now;
          }

          var device = new UserDevice
          {
              Platform = platform,
              DeviceId = deviceId,
              OriginalDeviceId = originalDeviceId,
              SystemVersion = systemVersion,
              Model = deviceModel,
              OperatingSystem = operationSystem,
              ClientVersion = clientVersion,
              Version = version,
              Ip = ip,
              ...
          };

          spec.ArrayAppend(nameof(User.Devices), device);
          user.Devices.Append(device);
          return spec;
      }
}
}

请问有人遇到过此类问题吗?

内容的提问来源于stack exchange,提问作者onurpekdemir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:52:33