Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spring数据MongoDB指定分片集合_Spring_Mongodb_Spring Boot_Spring Data Mongodb - Fatal编程技术网

使用Spring数据MongoDB指定分片集合

使用Spring数据MongoDB指定分片集合,spring,mongodb,spring-boot,spring-data-mongodb,Spring,Mongodb,Spring Boot,Spring Data Mongodb,我使用SpringBoot和SpringDataMongoDB与底层分片MongoDB集群进行接口。我的Spring Boot应用程序通过mongos路由器访问集群 使用SpringDataMongoDB,您可以通过@Document(collection=“nameOfCollection”)指定对象持久化到的集合,或者它默认为类名(第一个字母小写)。这些藏品不需要预先存在;它们可以在运行时创建 要在MongoDB中切分集合,您需要 1-在数据库上启用分片:sh.enableSharding(

我使用SpringBoot和SpringDataMongoDB与底层分片MongoDB集群进行接口。我的Spring Boot应用程序通过
mongos
路由器访问集群

使用SpringDataMongoDB,您可以通过
@Document(collection=“nameOfCollection”)
指定对象持久化到的集合,或者它默认为类名(第一个字母小写)。这些藏品不需要预先存在;它们可以在运行时创建

要在MongoDB中切分集合,您需要

1-在数据库上启用分片:
sh.enableSharding(“myDb”)

2-在分片数据库上对集合进行分片:
sh.shardCollection(“myDb.myCollection”,{id:“hashed”})

假设存在分片数据库,Spring Data MongoDB是否提供了一种使用分片密钥分片集合的方法?据我所知,我无法使用Spring分片集合,因此必须在启动应用程序运行之前配置分片集合。我觉得奇怪的是,Spring允许我使用未定义的集合,但不提供配置集合的方法

编辑:
我已经看到了这两个方面,其中更多地提到了分片MongoDB集群的部署。这个问题假设所有管道都在那里,并且集合本身必须被切分。

即使这不是Spring数据解决方案,也提出了一个潜在的解决方案,其中可以从Spring
MongoTemplate获取
DB

DB db = mongo.getDB("admin");
DBObject cmd = new BasicDBObject();
cmd.put("shardcollection", "testDB.x");
cmd.put("key", new BasicDBObject("userId", 1));
CommandResult result = db.command(cmd);

尽管这个问题已经很老了,但我还是遇到了同样的问题,而且从最近开始,似乎已经开始提供自定义切分键了

基于注释的分片键配置可在spring data mongodb:3.x上获得,

@文档(“用户”)
@分片(shardKey={“国家”,“用户ID})
公共类用户{
@身份证
长id;
@字段(“用户ID”)
字符串用户标识;
弦国;
}

到今天为止,
spring boot starter mongodb
已经提供了2.x版本。

在内部使用save()的更新查询中遇到了同样的问题

它是如何解决的

因此,我现在已经覆盖了SpringBootStarter中的SpringDataMongo核心依赖项,该依赖项在我们的模型中是2.1.x x x 3.x版本,现在支持@Sharded()注释

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>3.1.5</version>
</dependency>

现在它内部能够分辨出底层的mongo,这就是我们的shardkey。我假设这将进一步修复我们的count()查询,这些查询由于相同的错误“query need to target a shard”而失败。

根据文档,这在spring data mongodb 3.0中可用。但是,我找不到maven依赖项。spring data mongodb 3.0是否可用?您可以将其与spring boot版本2.3.0.M3一起使用,该版本可以从快照存储库中提取。安装指南:
@Document(collection = "hotelsdevice")
@Sharded(shardKey = { "device" })

public class Hotel extends BaseModel {