标签: spring-data-mongodb

Spring-data-mongodb连接到一个Mongo实例中的多个数据库

我使用的是最新的spring-data-mongodb(1.1.0.M2)和最新的Mongo Driver(2.9.0-RC1).我有一种情况,我有多个客户端连接到我的应用程序,我想在同一个Mongo服务器中给每个客户端自己的"架构/数据库".如果我直接使用驱动程序,这不是一项非常困难的任务:

Mongo mongo = new Mongo( new DBAddress( "localhost", 127017 ) );

DB client1DB = mongo.getDB( "client1" );
DBCollection client1TTestCollection = client1DB.getCollection( "test" );
long client1TestCollectionCount = client1TTestCollection.count();

DB client2DB = mongo.getDB( "client2" );
DBCollection client2TTestCollection = client2DB.getCollection( "test" );
long client2TestCollectionCount = client2TTestCollection.count();
Run Code Online (Sandbox Code Playgroud)

看,很容易.但是spring-data-mongodb不允许使用多个数据库的简单方法.设置连接的首选方法Mongo是扩展AbstractMongoConfiguration类:

您将看到重写以下方法:

getDatabaseName()
Run Code Online (Sandbox Code Playgroud)

因此它强制您使用一个数据库名称.然后构建的存储库接口使用传递给SimpleMongoRepository类的MongoTemplate中的数据库名称.

我到底在哪里粘贴多个数据库名称?我必须创建多个数据库名称,多个MongoTempates(每个数据库名称一个)和多个其他配置类.而且仍然没有让我的存储库接口使用正确的模板.如果有人尝试过这样的事情,请告诉我.如果我搞清楚,我会在这里发布答案.

谢谢.

java spring mongodb spring-data spring-data-mongodb

24
推荐指数
3
解决办法
3万
查看次数

如何为Spring数据中的类配置MongoDb集合名称

我有一个Products在我的MongoDB数据库中调用的集合,它由IProductPrice我的Java代码中的接口表示.以下存储库声明会导致Spring Date查看该集合db.collection: Intelliprice.iProductPrice.

我希望它将其配置为db.collection: Intelliprice.Products使用外部配置而不是放置@Collection(..)注释IProductPrice.这可能吗?我怎样才能做到这一点?

public interface ProductsRepository extends
    MongoRepository<IProductPrice, String> {
}
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data spring-data-mongodb

24
推荐指数
3
解决办法
3万
查看次数

Spring Data MongoDB:如何实现"实体关系"?

这个问题的标题是相当矛盾的,因为我试图在非关系数据库中实现关系... :)

但我的意思是如何定义使用MongoDB的应用程序模型类中的实体之间的关联.

使用JPA我经常使用@ManyToMany@OneToMany注释来定义对象之间的关系.Spring Data MongoDB中有类似的东西吗?

研究MongoDB我意识到这种关联有两种可能的方法:参考嵌入数据.

Spring Data使用哪一个?是否可以配置关联模式?

java spring mongodb spring-data spring-data-mongodb

23
推荐指数
1
解决办法
3万
查看次数

Mongo如何用DBRef查找$

我遇到了麻烦(/(ㄒㄒ/)/ ~~).假设集合A是

{ 
    "_id" : ObjectId("582abcd85d2dfa67f44127e1"), 
    "bid" : [
        DBRef("B", ObjectId("582abcd85d2dfa67f44127e0")),
        DBRef("B", ObjectId("582abcd85d2dfa67f44127e1"))
    ]
}
Run Code Online (Sandbox Code Playgroud)


和收藏B:

{ 
    "_id" : ObjectId("582abcd85d2dfa67f44127e0"),  
    "status" : NumberInt(1), 
    "seq" : NumberInt(0)
},
{ 
    "_id" : ObjectId("582abcd85d2dfa67f44127e1"), 
    "status" : NumberInt(1), 
    "seq" : NumberInt(0)
} 
Run Code Online (Sandbox Code Playgroud)


我不知道如何$查找'出价'.我试过了

db.A.aggregate(
    [
        {$unwind: {path: "$bid"}},
        {$lookup: {from: "B", localField: "bid", foreignField: "_id", as: "bs"}},
    ]
) 
Run Code Online (Sandbox Code Playgroud)



db.A.aggregate(
    [
        {$unwind: {path: "$bid"}},
        {$lookup: {from: "B", localField: "bid.$id", foreignField: "_id", as: "bs"}},
    ]
)
Run Code Online (Sandbox Code Playgroud)


但它不起作用.有人可以帮忙吗?谢谢.

mongodb spring-data-mongodb

21
推荐指数
3
解决办法
7734
查看次数

以编程方式设置MongoDb转换器

我正在尝试使用带有spring-data-mongodb的自定义转换器.我想以编程方式创建它,但我收到以下错误:

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of     converting from type org.joda.time.LocalDate to type java.lang.String
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:475)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:175)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:154)
....
....
Run Code Online (Sandbox Code Playgroud)

以下是失败的代码段:

    Mongo mongo = new Mongo();
    MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongo, "database");

    List<Converter> converters = new ArrayList<>();
    converters.add(new LocalDateWriteConverter());
    converters.add(new LocalDateReadConverter());
    CustomConversions customConversions = new CustomConversions(converters);

    MappingContext mappingContext = new SimpleMongoMappingContext();
    MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(mongoDbFactory, mappingContext);
    mappingMongoConverter.setCustomConversions(customConversions);

    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, mappingMongoConverter);

    MongoDbEvent mongoEvent = new MongoDbEvent(new LocalDate(2012, 12, 8));
    mongoTemplate.insert(mongoEvent);
Run Code Online (Sandbox Code Playgroud)

这是我的转换器类:

class LocalDateReadConverter implements Converter<String, …
Run Code Online (Sandbox Code Playgroud)

java mongodb spring-data-mongodb

20
推荐指数
3
解决办法
3万
查看次数

Spring数据mongodb - 'cursor'选项是必需的

我正在尝试使用Spring Data MongoDB 3.6-rc4执行聚合操作.

Aggregation agg = newAggregation(
    lookup("orders", "orderId", "_id", "order") 
);
List<BasicDBObject> results = mongoOperations.aggregate(agg, "transactions", BasicDBObject.class).getMappedResults();
Run Code Online (Sandbox Code Playgroud)

但是在运行查询时遇到以下错误

2017-11-24 17:03:41,539 WARN  org.springframework.data.mongodb.core.MongoTemplate : Command execution of { "aggregate" : "transactions" , "pipeline" : [ { "$lookup" : { "from" : "orders" , "localField" : "orderId" , "foreignField" : "_id" , "as" : "order"}}]} failed: The 'cursor' option is required, except for aggregate with the explain argument
2017-11-24 17:03:41,574 ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data-mongodb

20
推荐指数
2
解决办法
3万
查看次数

如何配置spring-data-mongodb以通过属性使用副本集

我目前正在编写一个应该使用MongoDB副本的应用程序.它是一个基于Spring Boot的应用程序,以下属性可以很好地连接到一台服务器:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=demo
Run Code Online (Sandbox Code Playgroud)

这对我当地的开发环境来说绝对没问题.但是后来它应该针对MongoDB副本集运行,所以我必须提供至少2个,更好的3个副本集种子,但是我怎么能用属性来做呢?

我在这个页面上看了一下:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html,但是没有提到的副本集的显式属性.提供以逗号分隔的地址列表,如下所示:

spring.data.mongodb.host=127.0.0.1,127.0.1.1,127.0.2.1
spring.data.mongodb.uri=mongo://127.0.0.1,mongo://127.0.0.1:27018
Run Code Online (Sandbox Code Playgroud)

(我试了一个接一个.)

这也不起作用(实际上,它会产生一个异常,让Spring使用默认配置).

我也尝试使用以下config.xml,没有运气:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:mongo="http://www.springframework.org/schema/data/mongo"
          xsi:schemaLocation=
          "http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <mongo:mongo id="replicaSetMongo" replica-set="127.0.0.1:27017,localhost:27018"/>

</beans>
Run Code Online (Sandbox Code Playgroud)

我知道上面的配置略有不同,但我目前正在尝试的是获得一个异常,它向我显示没有可访问的副本集节点.

任何想法,提示?

java mongodb spring-data-mongodb spring-boot

19
推荐指数
3
解决办法
4万
查看次数

在实体类java.time.ZonedDateTime上找不到属性null以将构造函数参数绑定到

我有以下配置

组态

@Configuration
@EnableMongoRepositories(basePackages = Constants.DATA_SCAN)
@EnableMongoAuditing(auditorAwareRef = "auditorAwareService")
@Import(value = MongoAutoConfiguration.class)
public class DatabaseConfiguration {

    @Bean
    public ValidatingMongoEventListener validatingMongoEventListener() {
        return new ValidatingMongoEventListener(validator());
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }

    @Bean
    public CustomConversions customConversions() {
        final List<Converter<?, ?>> converters = new ArrayList<>();
        converters.add(DateToZonedDateTimeConverter.INSTANCE);
        converters.add(ZonedDateTimeToDateConverter.INSTANCE);
        return new CustomConversions(converters);
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加了自定义转换器,但我仍然得到:

在实体类java.time.ZonedDateTime上找不到属性null以将构造函数参数绑定到!

@Document(collection = "user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private String id;

    @Field("reset_date")
    private ZonedDateTime resetDate = …
Run Code Online (Sandbox Code Playgroud)

java spring-data spring-data-mongodb jhipster spring-mongodb

19
推荐指数
1
解决办法
1849
查看次数

如何只返回Spring Data MongoDB中查询的特定字段?

我们如何在Spring Data Mongo中选择特定字段.我尝试以下,但我从投例外FooString.

运用 @Query

@Query(value="{path : ?0}", fields="{path : 0}")
String findPathByPath(String path);
Run Code Online (Sandbox Code Playgroud)

@Query

String findPathByPath(String path);
Run Code Online (Sandbox Code Playgroud)

这是文档模型

@Document(collection = "foo")
public class Foo  {

  String name, path;
  …
}
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data spring-data-mongodb

17
推荐指数
4
解决办法
3万
查看次数

我们如何使用spring boot为mongodb创建自动生成的字段

我写了一些代码.我想把BaseQuestionClass中的questionId字段设为Autogenerated.Any解决方案呢?我没有使用jpa jar.so我不能使用@Generatedvalue注释.所以我们如何在这里显示这个字段是自动生成的.代码如下.

的pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>audit_project</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
Run Code Online (Sandbox Code Playgroud)

BaseQuestion.java …

mongodb spring-data spring-data-mongodb spring-boot

17
推荐指数
1
解决办法
3万
查看次数