此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data MongoDB 4.4.0spring-doc.cadn.net.cn

配置

您可以使用以下配置来创建和注册MongoTemplate,如下例所示:spring-doc.cadn.net.cn

注册MongoClient对象并启用 Spring 的异常转换支持
@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>
  • MongoTemplate(MongoClient mongo, String databaseName):采用MongoClientobject 和要作的默认数据库名称。spring-doc.cadn.net.cn

  • MongoTemplate(MongoDatabaseFactory mongoDbFactory):采用一个 MongoDbFactory 对象,该对象封装了MongoClient对象、数据库名称以及用户名和密码。spring-doc.cadn.net.cn

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

在创建MongoTemplate / ReactiveMongoTemplate是默认的WriteResultCheckingPolicy,WriteConcern,ReadPreference以及下面列出的其他内容。spring-doc.cadn.net.cn

默认读取首选项

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

WriteResultChecking 策略

在开发过程中,如果com.mongodb.WriteResult从任何 MongoDB作返回都包含错误。在开发过程中忘记执行此作,然后最终得到一个看起来运行成功的应用程序,而实际上,数据库并未根据您的预期进行修改,这是很常见的。您可以设置WriteResultChecking的属性MongoTemplate设置为以下值之一:EXCEPTIONNONE,以抛出Exception或不执行任何作。默认使用WriteResultChecking的值NONE.spring-doc.cadn.net.cn

默认 WriteConcern

如果尚未通过驱动程序在更高级别(如com.mongodb.client.MongoClient),则可以设置com.mongodb.WriteConcern属性,该MongoTemplate用于写入作。如果WriteConcern属性,则默认为 MongoDB 驱动程序的 DB 或 Collection 设置中设置的 URL。spring-doc.cadn.net.cn

WriteConcernResolver (写入关注解析器)

对于更高级的情况,您希望设置不同的WriteConcern值(对于 REMOVE、UPDATE、INSERT 和 Save作),一个名为WriteConcernResolver可以配置MongoTemplate.因为MongoTemplate用于持久化 POJO,则WriteConcernResolver允许您创建一个策略,该策略可以将特定的 POJO 类映射到WriteConcern价值。下面的清单显示了WriteConcernResolver接口:spring-doc.cadn.net.cn

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

您可以使用MongoAction参数来确定WriteConcern值或使用 Template 本身的值作为默认值。MongoAction包含要写入的集合名称,则java.lang.ClassPOJO 中,皈依的Document、作 (REMOVE,UPDATE,INSERT,INSERT_LISTSAVE) 以及其他一些上下文信息。 以下示例显示了两组不同的类WriteConcern设置:spring-doc.cadn.net.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.cadn.net.cn

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

配置 EntityCallbacks

嵌套到生命周期事件时,模板会调用 EntityCallbacks,可以通过模板 API 设置(如果未自动配置)。spring-doc.cadn.net.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#useEstimatedCount(…​)true MongoTemplate#count(...)使用空筛选条件查询的作将被委托给estimatedCount,只要没有活动的事务并且模板未绑定到会话。 请参阅计数文件部分了解更多信息。spring-doc.cadn.net.cn