标签: spring-data-mongodb

在mongo集合上使用时,Spring数据版本注释不会递增

我正在使用带有mongodb的spring数据来存储二进制数据,例如图像等.我想维护一个版本字段以附加到url,以便从缓存图像中欺骗浏览器.

请参阅下面的文档基类:

import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Version;
import org.springframework.data.mongodb.core.index.Indexed;

public abstract class BaseDocument {

    @Id
    @Indexed(unique=true)
    protected long id;
    protected byte[] data;
    protected String mimeType;
    protected String filename;
    protected String extension;
    @Version
    private Long version;
Run Code Online (Sandbox Code Playgroud)

我还有一个包装MongoOperations的存储库来保存我的文档.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class DocumentRepository implements IDocumentRepository {

    @Autowired
    private MongoOperations mongoTemplate;

    @Override
    public <D extends BaseDocument> void saveDocument(D document) {
        mongoTemplate.save(document);
    }
Run Code Online (Sandbox Code Playgroud)

为了实现版本控制,我做了一些狩猎,发现有一个@Version注释为spring mongo,但是已被弃用.然后我发现应该使用spring数据@Version注释.所以我继续使用弹簧数据@Version注释.

我期望发生的是每次保存文档时我的版本字段都会增加.我多次覆盖同一个文档,但我的版本字段并没有像我期望的那样增加.

我做错了什么或者我还需要做些什么吗?

java versioning spring-data spring-data-mongodb

9
推荐指数
1
解决办法
4814
查看次数

MongoException:带名称的索引:代码已存在,具有不同的选项

我有一个具有以下结构的mongodb集合term

{
    "_id" : "00002c34-a4ca-42ee-b242-e9bab8e3a01f",
    "terminologyClass" : "USER",
    "code" : "X67",
    "terminology" : "some term related notes",
    "notes" : "some notes"
}
Run Code Online (Sandbox Code Playgroud)

和一个表示术语集合的java类 Term.java

@Document
public class Term{  

    @Id
    protected String termId;

    @Indexed
    protected String terminologyClass;

    @Indexed(unique=true)
    protected String code;

    @Indexed
    protected String terminology;

    protected String notes;

    //getters & setters
}
Run Code Online (Sandbox Code Playgroud)

term收藏了很多文件.现在我添加了一个新字段Term.javaas

@Indexed
protected String status;
Run Code Online (Sandbox Code Playgroud)

添加字段statusTerm.java,在向term集合中插入新术语时,我得到了一个例外:

com.mongodb.MongoException:带名称的索引:代码已经存在,具有不同的选项

我使用的是MongoDB版本:2.6.5和spring-data-mongodb版本:1.3.2

mongodb mongodb-java spring-data-mongodb mongodb-indexes

9
推荐指数
1
解决办法
2万
查看次数

使用Spring Data Mongo配置多个MongoDB存储库

我有2个Mongodb数据库连接到一个带有2个MongoTemplate-s的Spring Boot应用程序:

mongoTemplate(默认的bean名称,连接到默认的db)

mongoAppTemplate(在运行时连接到另一个数据库)

我有很多使用mongoTemplate的MongoRepository-s但我也想创建一些使用mongoAppTemplate的东西.

如何配置2个MongoRepository-s以使用不同的MongoTemplate -s和Java配置?

我找到了一种方法来使用XML(下面的链接),但我真的想保持它所有的注释

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

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

9
推荐指数
1
解决办法
8068
查看次数

Spring Data Mongo - 如何通过@DBRef字段的id进行查询

我是Spring Data Mongo的新手,所以我一定做错了,因为我无法设法执行这么简单的查询.这是我的模特:

@Document(collection="brands")
public class Brand{
    @Id
    private int id;

    private String name;
    ...
    //getters-setters
}

@Document(collection="models")
public class Model{
    @Id
    private int id;
    private String name;
    @DBRef
    private Brand brand;
    ...
    //getters-setters
}
Run Code Online (Sandbox Code Playgroud)

我想从一个品牌获得所有模型,所以我实现DAO如下:

@Repository
public interface IModelDAO extends MongoRepository<Model, Integer>{
    @Query(value="{ 'brand.$id' : ?0 }")
    public List<Model> findByBrandId(Integer id);   
}
Run Code Online (Sandbox Code Playgroud)

如果我在shell中执行这个mongodb查询,它可以工作: db.modelss.find({ 'brand.$id' : 1 })

但是,Java应用程序抛出以下异常:

Caused by: java.lang.IllegalAccessError
at org.springframework.data.mapping.PropertyReferenceException.detectPotentialMatches(PropertyReferenceException.java:134)
Run Code Online (Sandbox Code Playgroud)

显然它正在寻找Brand类中的字段$ id,因为它不存在,所以它失败了.所以我将查询更改为以下内容,以便导航到id字段:

@Query(value="{ 'brand.id' : ?0 }")
Run Code Online (Sandbox Code Playgroud)

现在,它不会抛出异常,但它在DB中找不到任何内容.

调试MongoTemplate.executeFindMultiInternal()方法可以看到它

DBCursor cursor = null;
    try { …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data spring-data-mongodb

9
推荐指数
1
解决办法
2万
查看次数

json字符串的Spring数据mongodb查询

我的代码需要支持客户端发送的任何查询.客户端将以json的形式发送查询.我使用java mongo驱动程序低级api使用以下代码完成此操作,
BasicDBObject queryObject = (BasicDBObject) JSON.parse(whereJson.toString());
因为我是spring数据mongodb中的新手,我无法在Query或Criteria类中找到类似的解决方案.我检查了不同的教程,但找不到任何教程.有可能在spring数据mongodb中做或者我应该使用低级apis本身吗?

java mongodb spring-data-mongodb

9
推荐指数
1
解决办法
6626
查看次数

Spring数据mongodb存储库findAll字段排除

我对spring数据mongodb存储库有一个奇怪的问题..我想从我的findAll请求中排除一个字段.我怎样才能做到这一点?

这非常有效:

@Query(fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findByObjectIdAndServiceIgnoreCase( String objectId, String service, Pageable pageable );
Run Code Online (Sandbox Code Playgroud)

但没有机会findAll:

@Query(fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll( Pageable pageable );
Run Code Online (Sandbox Code Playgroud)

抛出:

引起:org.springframework.data.mapping.PropertyReferenceException:找不到类型为ObjectHistory的属性findAll!org.springframework.data.mapping.PropertyPath.(PropertyPath.java:75)位于org.springframework.data.mapping.PropertyPath.create的org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) PropertyPath.java:307)org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270)org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241)atg.springframework.data .repository.query.parser.Part.(Part.java:76)

java spring repository mongodb spring-data-mongodb

9
推荐指数
1
解决办法
4143
查看次数

Spring Data mongo不区分大小写,如查询

我想用正则表达式查询使文本搜索大小写不敏感spring-data mongo .

例如在Oracle中:

select * from user where lower(username) like '%ab%'

我该如何进行此查询spring-data mongo

提前致谢

full-text-search mongodb-query spring-data-mongodb

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

如何在反应性Spring数据中应用分页?

在Spring Data中,我们PagingAndSortingRepository继承了它CrudRepository.在反应式Spring数据中,我们只有 ReactiveSortingRepository继承自ReactiveCrudRepository.我们怎么能以反应的方式进行分页呢?例如,我们将来能够做到这一点ReactivePagingAndSortingRepository吗?

reactive-programming spring-data spring-data-mongodb

9
推荐指数
2
解决办法
7325
查看次数

如何通过Spring Boot在MongoDB中加载初始数据?

是否可以MongoDB使用src/main/resources/data.sql或通过任何其他文件在数据库中加载初始数据?

据我所知,data.sql用于SQL数据库的,而MongoDB一个NOSQLDB.但只是想知道是否有任何等同data.sqlNOSQL数据库的.

谷歌搜索时我发现了这个SO链接(Spring Boot - 正在加载初始数据),它正在寻找我正在寻找的东西,但它仍然不是一个独立的文件data.sql.

java mongodb nosql spring-data-mongodb spring-boot

9
推荐指数
2
解决办法
4285
查看次数

如何配置支持会话的MongoDB集群?

我想探索MongoDB的新事务功能,并使用Spring Data MongoDB。但是,我收到异常消息“ 此客户端连接到的MongoDB群集不支持会话 ”。任何有关MongoDB 3.7.9的配置的提示都值得赞赏。

stacktrace以以下内容开头:

com.mongodb.MongoClientException:该客户端在com.mongodb.MongoClient.startSession(MongoClient.java:555)〜[mongodb-driver-3.8.0-beta2.jar:na)连接到的MongoDB群集不支持会话] org.springframework.data.mongodb.core.SimpleMongoDbFactory.getSession(SimpleMongoDbFactory.java:163)〜[spring-data-mongodb-2.1.0.DATAMONGO-1920-SNAPSHOT.jar:2.1.0.DATAMONGO-1920-快照]

mongodb spring-data spring-data-mongodb

9
推荐指数
3
解决办法
5421
查看次数