看来mongoOperations的更新不会触发AbstractMongoEventListener中的事件。
目前有什么方法可以监听如下更新事件吗?如果真是这样的话,这似乎是一个很大的遗漏。
MongoTemplate.updateMulti()
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在尝试使用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
是否可以在存储库端急切地解决客户并嵌入 …
我将 Spring 数据与 MongoDB 一起使用,我需要查找实际日期和提前 7 天之间的数据。
我已经使用 @Query 注释创建了存储库,并且不喜欢使用 Criteria 类。
您知道如何在 @Query 之间使用吗?
提前致谢。
spring mongodb spring-data-mongodb spring-boot spring-mongodb
我正在尝试使用自己的查询来查询 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
字符串 …
我需要使用 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 中实现它的方式是什么吗?
这些有什么区别呢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-web,spring-boot-starter-test)。
有人可以解释一下他们在 中的角色吗Spring boot?
我有包含嵌套数组的集合。我需要根据以下条件获取数据:
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
我正在将 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) 使用最新的 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 个项目的可能性的复杂代码。
我正在尝试使用 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