springboot工程中mongodb使用MongoRepository时嵌套对象的查询方法记录

坑,好大的一个坑,来的先甩个赞

 

先把model扔出来

package com.taikang.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @Author: LiuYan
 * @Description:
 * @Date: Created in 17:01 2019/4/11
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestModel {

    private String _id;
    private String score;
    private List list;
}
package com.taikang.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author: LiuYan
 * @Description:
 * @Date: Created in 17:03 2019/4/11
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class HahaModel {

    private String age;
    private String name;
}

在mongo库里存储了几个数据

springboot工程中mongodb使用MongoRepository时嵌套对象的查询方法记录_第1张图片

package com.taikang.dao;

import com.taikang.domain.TestModel;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author itw_liuyan01
 * @create 2018-01-08 14:41
 * @desc 智能提醒调用的原子服务
 */
@Repository
public interface TestDao extends MongoRepository {

    @Query(value = "{'list.name':'?0','list.age':'?1'}")
    List find(String name, String age);

}

注意啊

"{'list.name':'?0','list.age':'?1'}"

?0这个是占位符,对应方法里的name,?1就是age呗

你其实还可以指定@query里的field,这个是指定查出来哪个值返回给你,具体的别人都写过,搜一下都有

我要说的是?0两边一定要加'',不然条件是两个的时候是会报错的

 

要是就一个"{'list.name':?0}"你这么写也没毛病

springboot工程中mongodb使用MongoRepository时嵌套对象的查询方法记录_第2张图片

springboot工程中mongodb使用MongoRepository时嵌套对象的查询方法记录_第3张图片

这不就查出来了,你要是指定@Query了方法名好像注意点别用by这by那得就行最好别冲突springdata那种命名方式。

 

下面再来几个链接可以看看:

https://www.jianshu.com/p/24a44c4c7651

https://blog.csdn.net/zhou_xuexi/article/details/77963814

你可能感兴趣的:(mongodb)