首页 文章

我可以在mongo db / spring数据中使用查询注释来匹配作为dbref的set成员

提问于
浏览
1

我正在使用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 回答

  • 0

    您可以使用

    Account findByUsersAndDeletedIsFalse(User user);
    

    代替 . 至少Spring Spring Mongo随Spring 4.3一起发布 . 当然你可以改变你的方法调用findByUsers(user.id)并使用像你显示的“模块”一样的@Query

相关问题