我是靠谱客的博主 英勇水蜜桃,最近开发中收集的这篇文章主要介绍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);

最后

以上就是英勇水蜜桃为你收集整理的MongoDB查询时根据对象中的对象的属性进行判断的全部内容,希望文章能够帮你解决MongoDB查询时根据对象中的对象的属性进行判断所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部