spring 启动:ReactiveMongo 未能将排序规则信息添加到索引规范以创建索引(@Indexed)

spring boot : ReactiveMongo failed to add collation information to index spec for index creation (@Indexed)

我正在使用 Spring Boot webflux 和 spring 数据反应 mongodb。 我有一个用@Document 注释的用户class,它实现了UserDetails。问题是我有一个带有@Indexed(unique = true) 的username 字段。当应用程序启动时,即使在数据库上创建了索引,它也会抛出以下错误。

这里是 classes:


public abstract class GenericEntity<Tid> {
    
    abstract public Tid getId();
    
}
@Data
@Document(collection = "users")
@FieldDefaults(level = AccessLevel.PROTECTED)
@NoArgsConstructor
@AllArgsConstructor
public abstract class User extends GenericEntity<String> implements UserDetails {


    @Id
    String id;

    @Size(max = 63)
    @NotBlank(message = "First name is missing")
    String firstName;

    @Size(max = 63)
    @NotBlank(message = "Last name is missing")
    String lastName;

    @NotBlank
    @Size(min = 5, max = 40)
    @Email(message = "Invalid email address")
    @Indexed(unique = true)
    String username;

    @NotBlank
    @Size(min = 8, max = 255)
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    String password;

    @NotNull
    Boolean enabled = true;

    @NotEmpty
    List<Role> roles;
}
@Data
@Document(collection = "users")
@TypeAlias(value = "com.abcd.photograph.Photograph")
public class Photograph extends User {

    @NotNull
    Date birthDate;
    
}

错误:

2021-05-18 23:26:24.139  INFO 12613 --- [  restartedMain] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
2021-05-18 23:26:24.164  INFO 12613 --- [  restartedMain] com.assurance.BackApplication            : Started BackApplication in 3.885 seconds (JVM running for 4.409)
2021-05-18 23:26:24.182 ERROR 12613 --- [ntLoopGroup-3-7] o.s.d.m.core.ReactiveMongoTemplate       : Unexpected exception during asynchronous execution

org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 2 (BadValue): 'failed to add collation information to index spec for index creation: { key: { username: 1 }, name: "username", unique: true, collation: { locale: "users" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: "users" }' on server ******:27017. The full response is {"operationTime": {"$timestamp": {"t": 1621373184, "i": 8}}, "ok": 0.0, "errmsg": "failed to add collation information to index spec for index creation: { key: { username: 1 }, name: \"username\", unique: true, collation: { locale: \"users\" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: \"users\" }", "code": 2, "codeName": "BadValue", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1621373184, "i": 9}}, "signature": {"hash": {"$binary": {"base64": "*****", "subType": "00"}}, "keyId": *****}}}; nested exception is com.mongodb.MongoCommandException: Command failed with error 2 (BadValue): 'failed to add collation information to index spec for index creation: { key: { username: 1 }, name: "username", unique: true, collation: { locale: "users" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: "users" }' on server ******:27017. The full response is {"operationTime": {"$timestamp": {"t": 1621373184, "i": 8}}, "ok": 0.0, "errmsg": "failed to add collation information to index spec for index creation: { key: { username: 1 }, name: \"username\", unique: true, collation: { locale: \"users\" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: \"users\" }", "code": 2, "codeName": "BadValue", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1621373184, "i": 9}}, "signature": {"hash": {"$binary": {"base64": "*****", "subType": "00"}}, "keyId": *****}}}
        at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:133) ~[spring-data-mongodb-3.1.3.jar:3.1.3]
        at org.springframework.data.mongodb.core.ReactiveMongoTemplate.potentiallyConvertRuntimeException(ReactiveMongoTemplate.java:2819) ~[spring-data-mongodb-3.1.3.jar:3.1.3]
        at org.springframework.data.mongodb.core.ReactiveMongoTemplate.lambda$translateException(ReactiveMongoTemplate.java:2802) ~[spring-data-mongodb-3.1.3.jar:3.1.3]
        at reactor.core.publisher.Flux.lambda$onErrorMap(Flux.java:6597) ~[reactor-core-3.4.2.jar:3.4.2]
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) ~[reactor-core-3.4.2.jar:3.4.2]
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onError(MonoFlatMapMany.java:255) ~[reactor-core-3.4.2.jar:3.4.2]
        at com.mongodb.reactivestreams.client.internal.AbstractSubscription.onError(AbstractSubscription.java:142) ~[mongodb-driver-reactivestreams-4.1.1.jar:na]
        at com.mongodb.reactivestreams.client.internal.SingleResultCallbackSubscription.lambda$requestInitialData[=14=](SingleResultCallbackSubscription.java:41) ~[mongodb-driver-reactivestreams-4.1.1.jar:na]
        at com.mongodb.internal.async.client.AsyncMongoCollectionImpl.lambda$createIndex(AsyncMongoCollectionImpl.java:872) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.async.client.AsyncMongoCollectionImpl.lambda$executeCreateIndexes(AsyncMongoCollectionImpl.java:925) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.async.client.OperationExecutorImpl.onResult(OperationExecutorImpl.java:135) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.operation.OperationHelper$ReferenceCountedReleasingWrappedCallback.onResult(OperationHelper.java:531) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.operation.CreateIndexesOperation.onResult(CreateIndexesOperation.java:229) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.operation.CreateIndexesOperation.onResult(CreateIndexesOperation.java:226) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.operation.CommandOperationHelper.onResult(CommandOperationHelper.java:654) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.onResult(DefaultServer.java:285) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.CommandProtocolImpl.onResult(CommandProtocolImpl.java:82) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.onResult(DefaultConnectionPool.java:530) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.UsageTrackingInternalConnection.onResult(UsageTrackingInternalConnection.java:142) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.onResult(InternalStreamConnection.java:465) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.onResult(InternalStreamConnection.java:440) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:745) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:712) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.completed(InternalStreamConnection.java:582) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.completed(InternalStreamConnection.java:579) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:255) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:214) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.readAsync(InternalStreamConnection.java:579) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.access00(InternalStreamConnection.java:78) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:702) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:687) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.completed(InternalStreamConnection.java:582) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.completed(InternalStreamConnection.java:579) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:255) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:214) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:285) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream.access0(NettyStream.java:69) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:344) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:341) ~[mongodb-driver-core-4.1.1.jar:na]
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1533) ~[netty-handler-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1282) ~[netty-handler-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1329) ~[netty-handler-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:508) ~[netty-codec-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:447) ~[netty-codec-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[netty-codec-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.util.internal.ThreadExecutorMap.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.58.Final.jar:4.1.58.Final]
        at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: com.mongodb.MongoCommandException: Command failed with error 2 (BadValue): 'failed to add collation information to index spec for index creation: { key: { username: 1 }, name: "username", unique: true, collation: { locale: "users" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: "users" }' on server ******:27017. The full response is {"operationTime": {"$timestamp": {"t": 1621373184, "i": 8}}, "ok": 0.0, "errmsg": "failed to add collation information to index spec for index creation: { key: { username: 1 }, name: \"username\", unique: true, collation: { locale: \"users\" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: \"users\" }", "code": 2, "codeName": "BadValue", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1621373184, "i": 9}}, "signature": {"hash": {"$binary": {"base64": "*****", "subType": "00"}}, "keyId": *****}}}
        at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175) ~[mongodb-driver-core-4.1.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.onResult(InternalStreamConnection.java:454) ~[mongodb-driver-core-4.1.1.jar:na]
        ... 45 common frames omitted

感谢您的帮助。

根据错误消息“collat​​ion: { locale: "users" }”,我假设您在某处设置了排序规则。尝试在您的代码中搜索。