标签: spring-data-mongodb

需要有 2d 和 2dsphere 索引,但不能创建这两个索引。为什么?

在对 MongoDB 地理数据查询进行单元测试期间,我收到以下错误消息:

找不到任何特殊索引:2d(需要索引),2dsphere(需要索引),对于:{ address.location: { $nearSphere: { x: -120.0, y: 47.0 }, $maxDistance: 0.01567855942887398 }, status: “在里面” }; 嵌套异常是 com.mongodb.MongoException: can't find any special index: 2d (needs index), 2dsphere (needs index), for: { address.location: { $nearSphere: { x: -120.0, y: 47.0 } , $maxDistance: 0.01567855942887398 }, 状态: "INIT" }

createIndex但是,运行该命令后,我收到以下错误:

db.store.createIndex({"address.location":"2d"}) 预期位置对象,位置数组格式不正确 db.store.createIndex({"address.location":"2dsphere"}) 无法提取来自对象的地理键,畸形几何?:{类型:“点”,坐标:[47.399465,-122.2950165]}

文档数据的结构如下:

{
 ....
       "address" : {
           "street" : "Street One",
           "city" : "One City",
           "province" : "aProvince",
           "country" : "aCountry",
           "postalCode" : "91202",
           "location" …
Run Code Online (Sandbox Code Playgroud)

mongodb spring-data-mongodb

0
推荐指数
1
解决办法
2653
查看次数

使用 MongoTemplate 在列表中插入对象

我有以下结构:

\n\n
{ \n    "_id" : "adddddddddddd", \n    "_class" : "com.fluidm.service.identity.entity.Item", \n    "itemName" : "satyam", \n    "personList" : [ ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我有一个集合,比如说“项目”,其中包含人员列表,这些人员列表在内部作为数组存储在 MongoDB 中。

\n\n

我想使用MongoTemplate方法将一个人对象或一堆人对象插入到列表中。

\n\n

我尝试过推送方法,但没有成功。

\n\n
mongoTemplate.updateFirst(Query.query(Criteria.where("_id").is("\xe2\x80\x8badddddddddddd")), new Update().push("personList", person), Item.class);\n
Run Code Online (Sandbox Code Playgroud)\n\n

PS:我不想使用本机方法插入数据。

\n

spring mongodb spring-data spring-data-mongodb

0
推荐指数
1
解决办法
4581
查看次数

Spring Data MongoDb 是否支持 $filter 数组聚合运算符?

我正在尝试使用 MongoTemplate 在 Spring Data 中实现以下工作 mongoDb 查询:

db.answers.aggregate([
        { "$match" : { "object_id" : "1" } },
        { "$project": { 'answer_list': 1, 'profile': { $filter : { input: '$answer_list', as: 'answer', cond: { $eq: [ '$$answer.question', 2 ] } } } } },
        { "$unwind" : "$profile"},
        { "$unwind" : "$answer_list"},
        { "$group" : { "_id" : { "question" : "$answer_list.question", "answer" : "$answer_list.answer", "criteria" : "$profile.answer"}, "count" : { "$sum" : 1 } } },
        { "$sort" : …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data-mongodb

0
推荐指数
1
解决办法
7731
查看次数

Spring Data for MongoDB是否允许带有可选字段的文档?

我可以有一个可为空的字段吗?-如果其值为null,则不会在文档中存储该字段(名称或值);以及-如果其值为非null,则将字段名称和值存储在它。

spring mongodb spring-data spring-data-mongodb

0
推荐指数
1
解决办法
1619
查看次数

在Spring Data上订阅两次MongoDB save()会导致双重插入

我们遇到了以下我们理解的行为,但是我们想知道它是否是预期的,以及将它记录为某种陷阱可能是有意义的.

我们正在试验Spring Boot 2/Spring WebFlux并设置一个基本上有这样的东西的小应用程序(全部缩短):

@PostMapping
public Mono<Todo> addTodos( @RequestBody Person person ) {
    return personService.addPerson( person );
}
Run Code Online (Sandbox Code Playgroud)

该服务首先看起来像这样,因为我们想要将一个人的事件也发布到消息队列:

public class PersonService {
    public Mono<Person> addPerson( Person person ) {
        Mono<Person> addedPerson = personRepository.save( person );
        addedPerson.subscribe( p -> rabbitTemplate.convertAndSend( "persons", p ) );
        return addedPerson;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,这样做显然是错误的.该.subscribe()触发器的流动和我们假设反应REST控制器确实在背景相同的序列化的数据的响应,从而导致第二平行流动之前.最后,我们最终persons在数据库中的集合中有两个重复的条目.

在这个冗长的介绍之后,最后的问题是:这是多个订阅者触发多个插入的预期行为(基本上,如果您订阅n时间,您会获得n插入)?

如果是的话,这对于初学者来说可能是一个陷阱,特别是如果我们的理解是正确的,那么反应式REST控制器就会发挥作用.subscribe().

spring spring-mvc spring-data-mongodb project-reactor reactive

0
推荐指数
1
解决办法
1152
查看次数

如何使用 Spring 更新 MongoDB 中的数组?

我正在尝试根据从 Thymeleaf 驱动的页面获得的一些信息来更新数据库信息。基本上每个页面都是使用来自 MongoDB 的单个文档构建的。现在我想允许一些用户更改这个页面,因为实际页面并不那么复杂,我正在尝试这个 JavaScript 插件,它可以创建文本区域 div 并通过 Ajax 将它们发送到服务器(http:// www.dyve.net/jquery/?editable)。

由于文档只有唯一的字段,我可以将 html 中的字段 id 设置为 mongodb 字段的名称,例如 product-description。我可以通过发送 id 并且更新非常简单:

public boolean updateValueWithKey(String id, String k, String v) {
    Criteria c = Criteria.where(id).is(id);
    Query q = new Query().addCriteria(c);
    Update u = u.set(k, v);
    WriteResult w = operations.updateFirst(q, u, clazz);
    return w.wasAcknowledged();
}
Run Code Online (Sandbox Code Playgroud)

其中 id 是文档 ID 代码,k 是字段名称(键),v 是值。

但是我意识到文档的一个特定部分有一个数组,但我不明白如何更新数组的特定字段。

Update 类有一个名为 PushOperatorBuilder 的内部类,其中有一个名为 atPosition 的方法,文档中提到:“强制在给定的 {@literal position} 处添加值。”

但我真的不明白如何使用它,任何从实例化的 Update 对象访问该方法的尝试都会给我错误。

帮助?

spring-data-mongodb

0
推荐指数
1
解决办法
2409
查看次数

如何在 Spring Data 中将 Java 实体映射到多个 MongoDB 集合?

目前,我们正在寻找一种解决方案,将以下User实体同时保存到多个 MongoDB 集合中(即db_users和 on db_users_legacy)。两个集合都在同一个数据库中。

请不要问我为什么需要保存在两个集合中。这是业务需求。

@Document(collection = "db_users")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id
    private String id;
    private String name;
    private String website;
    private String name;
    private String email;

}
Run Code Online (Sandbox Code Playgroud)

我的 SpringBoot 应用程序配置如下;

@Configuration
public class ApplicationConfig {

    @Bean
    public MongoTemplate mongoTemplate(MongoDbFactory factory){
        MongoTemplate template = new MongoTemplate(factory);
        template.setWriteConcern(WriteConcern.ACKNOWLEDGED);
        retu,rn template;
    }

}
Run Code Online (Sandbox Code Playgroud)

目前我的存储库看起来像这样。并且保存工作得很好。如何在两个不同的集合中相同此文档?

@Repository
public class UserRepositoryImpl implements UserRepository {

    private MongoTemplate mongoTemplate;

    public UserRepositoryImpl(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    } …
Run Code Online (Sandbox Code Playgroud)

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

0
推荐指数
1
解决办法
4595
查看次数

MongoDB一对多和多对一关系

我正在尝试优化我的MongoDB集合。这是示例:

@Document
class Article {
    @Id
    private String id;
    @DBRef(lazy = true)
    @CascadeSave
    private List<Comment> comments;
    private String title;
    private String text;

    // constructors, getters and setters are ommited
}

@Document
class Comment {

    @Id
    private String id;
    private String text;
    private String author;

    // constructors, getters and setters are ommited
}
Run Code Online (Sandbox Code Playgroud)

看起来很简单。获取文章,然后获取本文的所有评论。但是,如果我已经有文章ID,并且只想获取文章的所有注释该怎么办?当然也很简单。每个评论都应引用其所属的文章(例如article_id)。

我的问题是如何自动执行?保存/更新等时如何在评论中插入article_id?还是我应该将字段添加到Comment类,然后首先保存文章,然后获取article_id,然后获取评论,添加article_id,保存评论并向文章评论集合添加评论?这对我来说毫无意义。

我正在使用带有Spring Boot 2.0.5的Java 10,其中包括spring-data-mongodb和反应驱动程序。我还实现了@CascadeSave批注,用于在保存文章时保存评论。

多谢您的回覆。

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

0
推荐指数
1
解决办法
1458
查看次数

当 MongoMappingContext 创建实体时,Spring Boot 3.0.3 中仍然存在“使用已弃用的 '-debug' 后备参数名称解​​析”警告

我正在使用 Spring Boot 3.0.3、Spring Core 6.0.5 和 Spring Data MongoDB 4.0.2。我看到许多以下形式的警告消息

ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: <your mongo entity here>
Run Code Online (Sandbox Code Playgroud)

在消息源插入断点,我得到以下堆栈跟踪:

apply:-1, LocalVariableTableParameterNameDiscoverer$$Lambda$1162/0x00000008013cfa98 (org.springframework.core)
computeIfAbsent:1708, ConcurrentHashMap (java.util.concurrent)
doGetParameterNames:96, LocalVariableTableParameterNameDiscoverer (org.springframework.core)
getParameterNames:90, LocalVariableTableParameterNameDiscoverer (org.springframework.core)
getParameterNames:67, PrioritizedParameterNameDiscoverer (org.springframework.core)
buildPreferredConstructor:236, PreferredConstructorDiscoverer$Discoverers (org.springframework.data.mapping.model)
discover:118, PreferredConstructorDiscoverer$Discoverers$1 (org.springframework.data.mapping.model)
discover:82, PreferredConstructorDiscoverer (org.springframework.data.mapping.model)
discover:81, InstanceCreatorMetadataDiscoverer (org.springframework.data.mapping.model)
<init>:113, BasicPersistentEntity (org.springframework.data.mapping.model)
<init>:84, BasicMongoPersistentEntity (org.springframework.data.mongodb.core.mapping)
createPersistentEntity:88, MongoMappingContext (org.springframework.data.mongodb.core.mapping)
createPersistentEntity:41, MongoMappingContext (org.springframework.data.mongodb.core.mapping)
doAddPersistentEntity:403, AbstractMappingContext (org.springframework.data.mapping.context)
addPersistentEntity:379, …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data-mongodb spring-boot

0
推荐指数
1
解决办法
4409
查看次数

-3
推荐指数
1
解决办法
1374
查看次数