我正在使用spring数据并拥有一个帐户集合,其中包含一组用户和一个已删除的标志和其他属性 .
{
"_id" : ObjectId("55f1f6222dcfdf26278d3c0a"),
"deleted" : false,
"users" : [
DBRef("users", ObjectId("55f4f6222dcfdf26278d3c07"))
],
"modules: [
DBRef("modules", ObjectId("55f4f6232dcfdf26278d3c07"))
],
...
}
我希望能够按用户查询帐户 . 我可以做一个派生查询(记录在这里:http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongodb.repositories.queries):
Account findByUsersAndDeleted(User user, boolean deleted);
在我的dao类中,它扩展了 MongoRepository
.
一切都很好 . 但我真的希望能够添加第二种方法,其中 deleted
默认为false,仅为我提供未删除的帐户 . 我更喜欢使用注释(而不是使用 MongoTemplate
http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo-template在java中编写查询)
不幸,
@Query("{deleted:false, 'user.$id' : ?0}")
Account findByUsers(User user);
也不是:
@Query("{deleted:false, 'user' : ?0}")
Account findByUsers(User user);
我认为问题是 Users
是一个集合,或者 Users
是存储为dbref的对象,还是组合 . 如果我通过id字段而不是对象搜索,它可以正常工作:
@Query("{deleted:false, 'modules.$id' : ?0}")
Account findByModules(String id);
有没有办法让 User
取消引用id?或者可能用于将查询保留在注释中的任何其他方法?
1 回答
您可以使用
代替 . 至少Spring Spring Mongo随Spring 4.3一起发布 . 当然你可以改变你的方法调用findByUsers(user.id)并使用像你显示的“模块”一样的@Query