此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data MongoDB 4.5.2spring-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):采用MongoClient对象和要作的默认数据库名称。spring-doc.cadn.net.cn

  • MongoTemplate(MongoDatabaseFactory 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

默认读取首选项

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

WriteResultChecking 策略

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

默认 WriteConcern

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

写入问题解析器

对于要设置不同WriteConcern基于每个作的值(对于删除、更新、插入和保存作),一个名为WriteConcernResolver可以配置在MongoTemplate.因为MongoTemplate用于持久化 POJO,则WriteConcernResolver允许您创建一个策略,该策略可以将特定的 POJO 类映射到WriteConcern价值。以下列表显示了WriteConcernResolver接口:spring-doc.cadn.net.cn

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

您可以使用MongoAction参数来确定WriteConcern值或使用模板本身的值作为默认值。MongoAction包含要写入的集合名称,java.lang.ClassPOJO 的 POJO,皈依的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