如何在QMap spring-data-mongoDB queryDSL中查找元素

问题描述

我们使用的是 spring-boot 2.2.1 和 query-dsl-mongoDB 4.2.1。

我们正在使用 spring-data.mongodb findAll 方法 tp 从书籍收藏中查找书籍使用 各种谓词,如 bookUid、authorId、customerId、status、isbn 和 provisioningId。 我可以构造除 bookInfo 之外的所有属性

请查找样本集以供参考。

{
    "_id" : ObjectId("6036323daa819c04005cff68"),"bookUid" : "spring_boot","authorId" : "602bc44827e37ca2ba281f54","customerId" : "75e1c48e","status" : "ACTIVE","name" : "Spring boot","statusTimestamp" : ISODate("2021-02-24T11:07:28.000Z"),"deleted" : false,"bookInfo" : {
        "isbn" : "240220211202","provisioningId" : "240220211202"
    },"customInfo" : {},"version" : 1,"countryCode" : "CZ","_class" : "book-collection"
}

这是java类

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Book {

    @Id
    private String id;

    @Indexed
    @WhiteSpaceTrim
    private String bookUid;

    private String authorId;
    private String customerId;
    private String status;
    private String name;
    private Date statusTimestamp;
    private boolean deleted;
    @WhiteSpaceTrim
    private Map<String,String> provisionInfo;
    private SmartObject customInfo;
    private int version;
    private String countryCode;
}

在查看查询 DSL 自动生成的类时,我看到 BookInfo 的类型是 QMap

public final ext.java.util.QMap provisionInfo = new ext.java.util.QMap(forProperty("bookInfo"));

我尝试构建以下谓词 bookInfo 是否与 bey 键和值匹配

Map expre = new HashMap(); expre.put(key,value); predicates.add(QBook.book.provisionInfo.in(expre).isTrue());

但不幸的是它不起作用并抛出异常,然后尝试以下表达式

PathBuilder entityPath = new PathBuilder(Book.class,"书信息"); predicates.add(entityPath.getMap("map",String.class,String.class).get(key).eq(value));

但它总是返回一个空集合,即使我们有匹配的 isbnprovisioningId

我正在查看文档,但也找不到任何帮助。

任何帮助都会非常可观。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...