MongoDB查询时根据对象中的对象的属性进行判断

接受同事留下来的项目,没想到运行的时候还有bug,无法对对象的对象的属性进行条件查询,非常操蛋,琢磨了一下午终于解决了。
话不多说,贴代码

@Data
@Document
@ToString
@Accessors(chain = true)
public class ChatMessage {
    @Id
    private String id;
    /**
     * 消息的头部
     */
    private MessageHeader messageHeader;
    /**
     * 消息的主体
     */
    private MessageBody messageBody;
    /**
     * mongodb时区问题无解,故把时间转为字符串类型
     */
    private String createTime;
}
@Data
@ToString
@Accessors(chain = true)
public class MessageHeader {
    @Indexed
    @JsonSerialize(using = ToStringSerializer.class)
    /**
     * 消息从哪里来(发消息者的topic,topic可暂时用用户Id代替)
     */
    private String from;
    @Indexed
    @JsonSerialize(using = ToStringSerializer.class)
    /**
     * 消息到哪里去(接收消息者的topic,topic可暂时用用户Id代替)
     */
    private String to;
}

现在是要对chatMessage中的messageHeader中的to进行条件查询,这里用的是jpa的MongoRepository

方法一:

   //此处是添加所要根据的条件
   ChatMessage message = new ChatMessage();

   message.setMessageHeader(new MessageHeader().setTo("1401061832747122688"));
        //此处是根据指定条件精确查询
   ExampleMatcher matcher = ExampleMatcher
                .matching()
                .withMatcher("messageHeader.to", ExampleMatcher.GenericPropertyMatchers.contains());

   Example<ChatMessage> example = Example.of(message, matcher);
   System.out.println(repository.findAll(example));

方法二:

    @Query("{ 'messageHeader.from' : ?0, 'messageHeader.to' : ?1}")
    List<ChatMessage> findChatMessagesByMessageHeader_ToAndMessageHeader_From(String from, String to);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值