标签: spring-data-mongodb

为什么 Spring Data MongoDB 不公开 update…(…) 方法的事件?

看来mongoOperations的更新不会触发AbstractMongoEventListener中的事件。

这篇文章表明至少 2014 年 11 月是这样

目前有什么方法可以监听如下更新事件吗?如果真是这样的话,这似乎是一个很大的遗漏。

MongoTemplate.updateMulti()
Run Code Online (Sandbox Code Playgroud)

谢谢!

spring event-listener spring-data-mongodb

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

在 Spring 数据的 RepositoryRestResource 中急切地加载 MongoDB @DBRef

我正在尝试使用RepositoryRestResource和实现一个rest apiRestTemplate

除了加载@DBRef 之外,一切都运行良好

考虑这个数据模型:

public class Order
{
   @Id
   String id;

   @DBRef
   Customer customer;

   ... other stuff
}

public class Customer
{
    @Id
    String id;

    String name;

    ...
}
Run Code Online (Sandbox Code Playgroud)

以及以下存储库(客户的类似存储库)

@RepositoryRestResource(excerptProjection = OrderSummary.class)
public interface OrderRestRepository extends MongoRepositor<Order,String>{}
Run Code Online (Sandbox Code Playgroud)

其余 api 返回以下 JSON:

{
  "id" : 4,
  **other stuff**,
  "_links" : {
    "self" : {
      "href" : "http://localhost:12345/api/orders/4"
    },
    "customer" : {
      "href" : "http://localhost:12345/api/orders/4/customer"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果由 resttemplate 正确加载,将创建一个新的 Order 实例,其中 customer = null

是否可以在存储库端急切地解决客户并嵌入 …

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

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

如何使用@Query在日期之间选择Spring数据MongoDB

我将 Spring 数据与 MongoDB 一起使用,我需要查找实际日期和提前 7 天之间的数据。

我已经使用 @Query 注释创建了存储库,并且不喜欢使用 Criteria 类。

您知道如何在 @Query 之间使用吗?

提前致谢。

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

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

MongoRepository JSON 日期查询 (Spring)

我正在尝试使用自己的查询来查询 mongo 存储库:

@Repository
public interface LogEntryRepository extends MongoRepository<LogEntry,String> {

    @Query("{'created_at' : {{ $gte: ISODate(?0)},{$lt: ISODate(?1)}}, " +
        "$or: [{'site': {$regex: ?2}}, {'login': {$regex: ?2}}, {'ip': {$regex: ?2}} ]" +
        "}")
    public Page<LogEntry> findByDateTimeBetweenAndCriteria(String isoStartDate, String isoEndDate, String searchTerm, Pageable page);

}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是使用关键字搜索过时的日志。上面抱怨解析错误:

        Caused by: com.mongodb.util.JSONParseException: 
    {'created_at' : { $gte: ISODate("_param_0"), $lt: ISODate("_param_1")}, $or: [{'site': {$regex: "_param_2"}}, {'login': {$regex: "_param_2"}}, {'ip': {$regex: "_param_2"}} ]}
                            ^
Run Code Online (Sandbox Code Playgroud)

如果我ISODate(?0)简单地将 the 替换为?0它会产生Page 1 of 0 containing UNKNOWN instances

字符串 …

mongodb spring-data spring-data-mongodb

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

带有 Java 外键的 MongoDb

我需要使用 Java 在我的 MongoDB 中保存两个集合。其中一个集合是Department,另一个集合是Employee。如果一个部门可以有很多员工,我想保存一个集合,例如必须将员工唯一 ID 映射到我的部门员工列表中。

例子:

{
    "_id" : ObjectId("598da19250aa4ad2413d4bc0"),
    "_class" : "com.department",
    "departmentName" : "SAQ-A",
    "departmentNumber" : "3_2",
    "employee" : [ 
           "id" : "1",
           "id" : "2",
           "id" : "3"
     ]
}
Run Code Online (Sandbox Code Playgroud)

我可以知道使用 Java 在 MongoDB 中实现它的方式是什么吗?

java spring mongodb spring-data spring-data-mongodb

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

Spring 启动 mongoDB jar

这些有什么区别呢Spring Boot jars

  • spring-boot-starter-data-mongodb jar

  • spring-data-mongodb jar

  • mongodb 驱动程序 jar

  • mongodb-驱动程序核心 jar

    我对这些的理解是mongodb-drivermongoDB 的 java 驱动程序。对于许多人来说,它spring-boot-starter-data-mongodb就像 Spring Boot 一样入门(spring-boot-starter-webspring-boot-starter-test)。

有人可以解释一下他们在 中的角色吗Spring boot

java jar mongodb spring-data-mongodb spring-boot

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

使用 $map 进行 MongoDB 嵌套数组搜索

我有包含嵌套数组的集合。我需要根据以下条件获取数据:

empId : 19107
address.country: "AUS"
group.primaryGroup.primary:"Y"
group.subGroup.primarySubGroup.primary : "Y"
Run Code Online (Sandbox Code Playgroud)

输入:

{
    "empId": "19107",
    "address": [
        {
            "street": "no.12 wilson street",
            "country":"AUS"
        },
        {
            "description": "No.32 watson street",
            "country":"CAN"
        }
    ],
    "mobile": 2387468238,
    "group": [
        {
            "groupId": 75227,
            "primaryGroup": [
                {
                    "primary": "Y"
                },
                {
                    "primary": "N"
                }
            ],
            "subGroup": [
                {
                    "subGroupId": 123,
                    "primarySubGroup": [
                        {
                            "primary": "Y"
                        },
                        {
                            "primary": "N"
                        }
                    ]
                },
                {
                    "subGroupId": 234,
                    "primarySubGroup": [
                        {
                            "primary": "N"
                        },
                        {
                            "primary": "Y"
                        }
                    ] …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework spring-data-mongodb

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

Spring Data Reactive Mongo:类类型转换器

我正在将 Spring boot 2 webflux 与反应式 mongo 存储库一起使用。我正在尝试使用Class<>字段类型持久化和查询实体。但我不知道如何配置我的应用程序以使用这种类型。这是我想存储在 mongo 中的实体:

import lombok.Data;
import org.springframework.data.annotation.Id;

@Data
public class ServiceEntity {

  @Id
  private String id;
  private String name;
  private Class inputClass;
}
Run Code Online (Sandbox Code Playgroud)

这是我的 mongo 配置:

import static java.util.Arrays.asList;

import com.mongodb.MongoClient;
import com.mongodb.MongoException;
import com.mongodb.async.client.MongoClientSettings;
import lombok.extern.slf4j.Slf4j;
import org.bson.BsonReader;
import org.bson.BsonWriter;
import org.bson.codecs.Codec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;
import org.bson.codecs.configuration.CodecProvider;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;

@Configuration
@Slf4j
public class MongoConfiguration {

  @Bean
  public MongoClientSettings settings() …
Run Code Online (Sandbox Code Playgroud)

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

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

提供对 Spring Data Mongo 存储库的限制

使用最新的 Spring Data Mongo(撰写本文时为 2.1.1),如何指定获取“自定义”查询方法的第一条记录?下面是一个例子:

@Query(value="{name: ?0, approval: {'$ne': null}}",
        sort="{'approval.approvedDate': -1}",
        fields = "{ _id: 1 }")
List<Item> getLatestApprovedIdByName(String name, Pageable pageable);

/**
 * Finds the id of the most recently approved document with the given name.
 */
default Item getLatestApprovedIdByName(String name) {
    return getLatestApprovedIdByName(name, PageRequest.of(0, 1)).stream().findFirst().orElse(null);
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我可以只使用 String 参数来注释 getLatestApprvedIdByName。org.springframework.data.mongodb.repository.Query注释上似乎没有限制字段。这看起来很奇怪,因为我可以模拟命名方法所做的一切,除了“findFirst”。如果没有 Pageable,我得到IncorrectResultSizeDataAccessException,并且返回 aList是不可接受的,因为我不想浪费时间返回任意大的结果,加上需要处理 0 或 1 个项目的可能性的复杂代码。

java mongodb spring-data spring-data-mongodb

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

使用Spring data Rest @RepositoryRestResource 创建rest端点时是否需要注释@EnableMongoRepositories

我正在尝试使用 Spring Boot 指南来使用@RepositoryRestResource注释创建 Spring Data Rest 端点。我观察到的是,在指南中,他们没有指定我们使用任何其他注释而不是@RepositoryRestResource. 所以我所做的是:

public class Merchant{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

@RepositoryRestResource(collectionResourceRel = "account", path = "account")
public interface MerchantRepository extends MongoRepository<Merchant, String> {

    List<Person> findByLastName(@Param("name") String name);

} …
Run Code Online (Sandbox Code Playgroud)

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

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