Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring MongoRepository查询向查询添加_类字段_Spring_Mongodb_Spring Data_Spring Data Mongodb - Fatal编程技术网

Spring MongoRepository查询向查询添加_类字段

Spring MongoRepository查询向查询添加_类字段,spring,mongodb,spring-data,spring-data-mongodb,Spring,Mongodb,Spring Data,Spring Data Mongodb,我有一个名为User的域类。它使用MyUserId对象作为Id @Document(collection = "users") public class User implements Serializable { @Property @Id private MyUserId id; @Version private Integer version; private String firstName; // Setters, getters }

我有一个名为User的域类。它使用
MyUserId
对象作为
Id

@Document(collection = "users")
public class User implements Serializable {
    @Property
    @Id
    private MyUserId id;
    @Version
    private Integer version;

    private String firstName;
// Setters, getters 
}
MyUserId
类:

public class MyUserId implements Serializable{
    @Property
    private String userId;
    @Property
    private String sampleId;
// setters, getters
    }
在我的Mongo中,文档被存储为
{u id:{userId:…,sampleId:…},}

我的userRepository如下所示:

public interface UserRepository extends MongoRepository<User, MyUserId> {
    @Query("{'_id': {$in: ?0}}")
    List<User> findByUserIds(Collection<MyUserId> userIds);
}

很明显,它是在查询时添加_class字段,而不是在存储时添加。有人能解释一下如何解决这个问题吗?这导致我所有的查询都失败了。谢谢大家!

使用复杂id类型的
@Query
时,实际上存在一个问题。我建议在问题解决之前使用自定义存储库实现

在自定义实现中,您可以使用
MongoTemplate
以如下方式执行查询

@Override
public List<User> findByUserIds(Collection<MyUserId> userIds) {
    return template.find(query(where("id").in(userIds)), User.class);
}
@覆盖
公共列表FindByUserID(集合用户ID){
返回template.find(查询(其中(“id”).in(userid)),User.class);
}

感谢您确认这是一个问题,我马上就到了。
@Override
public List<User> findByUserIds(Collection<MyUserId> userIds) {
    return template.find(query(where("id").in(userIds)), User.class);
}