对于最新的稳定版本,请使用 Spring Data MongoDB 4.4.0spring-doc.cn

配置

您可以使用以下配置来创建和注册 的实例,如下例所示:MongoTemplatespring-doc.cn

注册对象并启用 Spring 的异常转换支持MongoClient
@Configuration
class ApplicationConfiguration {

  @Bean
  MongoClient mongoClient() {
      return MongoClients.create("mongodb://localhost:27017");
  }

  @Bean
  MongoOperations mongoTemplate(MongoClient mongoClient) {
      return new MongoTemplate(mongoClient, "geospatial");
  }
}
@Configuration
class ReactiveApplicationConfiguration {

  @Bean
  MongoClient mongoClient() {
      return MongoClients.create("mongodb://localhost:27017");
  }

  @Bean
  ReactiveMongoOperations mongoTemplate(MongoClient mongoClient) {
      return new ReactiveMongoTemplate(mongoClient, "geospatial");
  }
}
<mongo:mongo-client host="localhost" port="27017" />

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  <constructor-arg ref="mongoClient" />
  <constructor-arg name="databaseName" value="geospatial" />
</bean>

MongoTemplateReactiveMongoTemplate 有几个重载的构造函数:spring-doc.cn

  • MongoTemplate(MongoClient mongo, String databaseName):获取要对其执行操作的对象和默认数据库名称。MongoClientspring-doc.cn

  • MongoTemplate(MongoDatabaseFactory mongoDbFactory):采用封装对象、数据库名称以及用户名和密码的 MongoDbFactory 对象。MongoClientspring-doc.cn

  • MongoTemplate(MongoDatabaseFactory mongoDbFactory, MongoConverter mongoConverter):添加 用于映射。MongoConverterspring-doc.cn

在创建 / 时,您可能希望设置的其他可选属性是默认 、 和 下面列出的其他属性。MongoTemplateReactiveMongoTemplateWriteResultCheckingPolicyWriteConcernReadPreferencespring-doc.cn

默认读取首选项

如果未通过 Query 定义其他首选项,则默认读取首选项将应用于读取操作。spring-doc.cn

WriteResultChecking 策略

在开发过程中,如果从任何 MongoDB 操作返回的内容包含错误,则记录或引发异常非常方便。在开发过程中忘记执行此操作,然后最终得到一个看起来运行成功的应用程序,而实际上,数据库并未根据您的预期进行修改,这是很常见的。您可以将 的属性设置为以下值之一:或 ,分别引发 an 或不执行任何操作。默认值为。com.mongodb.WriteResultWriteResultCheckingMongoTemplateEXCEPTIONNONEExceptionWriteResultCheckingNONEspring-doc.cn

默认 WriteConcern

如果尚未通过更高级别的驱动程序指定(例如 ),则可以设置用于写入操作的属性。如果未设置该属性,则默认为 MongoDB 驱动程序的 DB 或 Collection 设置中设置的属性。com.mongodb.client.MongoClientcom.mongodb.WriteConcernMongoTemplateWriteConcernspring-doc.cn

WriteConcernResolver (写入关注解析器)

对于更高级的情况,您希望在每个操作的基础上设置不同的值(用于删除、更新、插入和保存操作),可以在 上配置一个名为 的策略接口。由于 用于持久化 POJO,因此允许您创建一个策略,该策略可以将特定 POJO 类映射到值。下面的清单显示了该接口:WriteConcernWriteConcernResolverMongoTemplateMongoTemplateWriteConcernResolverWriteConcernWriteConcernResolverspring-doc.cn

public interface WriteConcernResolver {
  WriteConcern resolve(MongoAction action);
}

您可以使用该参数来确定值,也可以使用 Template 本身的值作为默认值。 包含要写入的集合名称、POJO 的集合名称、转换的集合、操作(、、、 、 或 )以及其他一些上下文信息。 以下示例显示了两组获取不同设置的类:MongoActionWriteConcernMongoActionjava.lang.ClassDocumentREMOVEUPDATEINSERTINSERT_LISTSAVEWriteConcernspring-doc.cn

public class MyAppWriteConcernResolver implements WriteConcernResolver {

  @Override
  public WriteConcern resolve(MongoAction action) {
    if (action.getEntityType().getSimpleName().contains("Audit")) {
      return WriteConcern.ACKNOWLEDGED;
    } else if (action.getEntityType().getSimpleName().contains("Metadata")) {
      return WriteConcern.JOURNALED;
    }
    return action.getDefaultWriteConcern();
  }
}

发布实体生命周期事件

该模板发布生命周期事件。 如果没有侦听器,则可以禁用此功能。spring-doc.cn

@Bean
MongoOperations mongoTemplate(MongoClient mongoClient) {
    MongoTemplate template = new MongoTemplate(mongoClient, "geospatial");
	template.setEntityLifecycleEventsEnabled(false);
	// ...
}

配置 EntityCallbacks

嵌套到生命周期事件时,模板会调用 EntityCallbacks,可以通过模板 API 设置(如果未自动配置)。spring-doc.cn

@Bean
MongoOperations mongoTemplate(MongoClient mongoClient) {
    MongoTemplate template = new MongoTemplate(mongoClient, "...");
	template.setEntityCallbacks(EntityCallbacks.create(...));
	// ...
}
@Bean
ReactiveMongoOperations mongoTemplate(MongoClient mongoClient) {
    ReactiveMongoTemplate template = new ReactiveMongoTemplate(mongoClient, "...");
	template.setEntityCallbacks(ReactiveEntityCallbacks.create(...));
	// ...
}

文档计数配置

通过设置为 MongoTemplate#count(...) 操作,只要没有活动的事务并且模板未绑定到会话,则使用空过滤器查询的操作将被委托给。 请参阅计数文件部分了解更多信息。MongoTemplate#useEstimatedCount(…​)trueestimatedCountspring-doc.cn