首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Spring数据MongoDB指定共享集

用Spring数据MongoDB指定共享集
EN

Stack Overflow用户
提问于 2017-11-28 18:31:35
回答 3查看 5.9K关注 0票数 7

我使用Spring和Spring与底层的切分MongoDB集群进行接口。我的通过mongos路由器访问集群。

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

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

1-启用数据库上的切分:sh.enableSharding("myDb")

2-在切分数据库上分割集合:sh.shardCollection("myDb.myCollection", {id:"hashed"})

假设有一个现有的切分数据库, Data MongoDB是否提供了一种使用碎片键分割集合的方法?据我所知,我不能用Spring分割集合,因此必须在启动应用程序运行之前配置这个切分集合。我感到奇怪的是,Spring允许我使用未定义的集合,但没有提供配置集合的方法。

编辑:--我看到了Sharding with spring mongoHow configuring access to a sharded collection in spring-data for mongo?,它们更多地提到了一个切分MongoDB集群的部署。这个问题假定所有的管道都在那里,并且集合本身必须被分割。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-01 11:02:42

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

基于注释的碎片密钥配置可在spring-data-mongodb:3.xhttps://docs.spring.io/spring-data/mongodb/docs/3.0.x/reference/html/#sharding上使用

代码语言:javascript
运行
复制
@Document("users")
@Sharded(shardKey = { "country", "userId" }) 
public class User {

    @Id
    Long id;

    @Field("userid")
    String userId;

    String country;
}

不过,到目前为止,spring-boot-starter-mongodb附带了2.x版本。

票数 4
EN

Stack Overflow用户

发布于 2017-11-28 18:47:33

尽管这不是一个Spring数据解决方案,但在how to execute mongo admin command from java中提供了一个潜在的解决方案,在这里,可以从SpringMongoTemplate中获取DB

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2021-03-19 18:26:27

在内部使用save()的update查询中遇到了相同的问题。

它是怎么解决的?

因此,我现在已经重写了核心依赖于spring starter,在我们的模型中它是2.1.x乘3.x,该版本现在支持@Sharded()注释。

代码语言:javascript
运行
复制
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>3.1.5</version>
</dependency>

允许你说

代码语言:javascript
运行
复制
@Document(collection = "hotelsdevice")
@Sharded(shardKey = { "device" })

public class Hotel extends BaseModel {

在内部,它现在能够告诉潜在的芒果,这是我们的锋利钥匙。我假设这将进一步修正count()查询,这些查询由于同样的错误“查询需要针对碎片”而失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47538573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档