我需要编写一个应用程序,可以使用spring-data和mongodb进行复杂的查询。我一直从使用MongoRepository开始,但是在复杂的查询中苦苦寻找实例或真正理解语法。
我说的是这样的查询:
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
List<User> findByEmailOrLastName(String email, String lastName);
}
或使用基于JSON的查询,但由于语法不正确,因此尝试并尝试了它。即使在阅读了mongodb
文档之后(由于语法错误,仍无法正常工作的示例)。
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
@Query("'$or':[{'firstName':{'$regex':?0,'$options':'i'}},{'lastName':{'$regex':?0,'$options':'i'}}]")
List<User> findByEmailOrFirstnameOrLastnameLike(String searchText);
}
阅读完所有文档后,似乎mongoTemplate文档要好得多MongoRepository。我指的是以下文档:
http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/
你能告诉我使用什么更方便,更强大吗?mongoTemplate
还是MongoRepository
?两者都是成熟的,还是其中一个比另一个缺少更多的功能?
“方便”和“使用功能强大”在某种程度上与目标背道而驰。到目前为止,存储库比模板方便得多,但是后者当然可以为你提供对执行内容的更细粒度的控制。
由于存储库编程模型可用于多个Spring Data模块,因此你可以在Spring Data MongoDB 参考文档的常规部分中找到有关它的更多详细文档。
TL; DR
我们通常建议采用以下方法:
从存储库摘要开始,仅使用查询派生机制或手动定义的查询声明简单查询。
对于更复杂的查询,将手动实现的方法添加到存储库中(如此处所述)。供实现使用MongoTemplate。
细节
对于你的示例,这看起来像这样:
interface CustomUserRepository {
List<User> yourCustomMethod();
}
class UserRepositoryImpl implements CustomUserRepository {
private final MongoOperations operations;
@Autowired
public UserRepositoryImpl(MongoOperations operations) {
Assert.notNull(operations, "MongoOperations must not be null!");
this.operations = operations;
}
public List<User> yourCustomMethod() {
// custom implementation here
}
}
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository {
}
我需要编写一个应用程序,用它我可以使用spring数据和MongoDB进行复杂的查询。我开始使用MongoRepository,但在复杂的查询中很难找到示例或真正理解语法。 我说的是这样的问题: 或者使用基于JSON的查询,因为语法不对,所以我试了一遍又一遍。即使在阅读了mongodb文档之后(由于语法错误,不工作的示例)。 在通读了所有文档之后,似乎的文档要比好得多。我指的是以下文档: http
我有一个应用程序有多个mongo配置。这是通过一些@Configuration类实现的,比如 配置1——应用程序 配置2--测试 然后在我的房子里 因此,两个mongo配置连接到本地运行但具有不同数据库的实例。我也尝试过使用不同的地址,但它的行为相同。 不管怎么说,这将通过实体和MongoRepository来使用 回购 然而,当我在某个地方的课堂上使用它时 此对象被写入,而不是我所期望的,因为它
问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。
本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块
问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。
问题内容: 我一直认为Java 中的运算符用于验证其两个布尔操作数是否均为,并且该&运算符用于对两种整数类型进行按位运算。 最近我知道,也可以使用运算符来验证其两个布尔操作数是否均为,唯一的区别是即使LHS操作数为false,它也会检查RHS操作数。 Java中的运算符是否在内部重载?还是在这背后有其他概念? 问题答案: <-验证两个操作数 <-停止评估第一个操作数是否为false,因为结果为fa