我写了一个小的学习项目来使用MongoDB。我使用Spring数据获取Mongo存储库。创建RestController并通过Service(另一个类)使用MongoRepository从mongodb检索信息并将其呈现给浏览器是相当容易的。
public interface PersonRepository extends MongoRepository<Person, Integer> {
List<Person> findByName(String name);
@Query("{'name':{$regex:?0}}")
List<Person> findByNameLike(String nameLike);
//the rest of methods
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class})
public class TestMongo {
private static final Logger LOG = LoggerFactory.getLogger(TestMongo.class);
@Autowired
private PersonRepository personRepository;
@Before
public void setUp() {
Technology technology1 = new Technology("Java-7");
Technology technology2 = new Technology("Java-8");
Technology technology3 = new Technology("Hibernate");
Technology technology4 = new Technology("MyBatis");
Technology technology5 = new Technology("Spring Data");
Project project1 = new Project(1, "POINT", Arrays.asList(technology1, technology3));
Project project2 = new Project(2, "Forecast", Arrays.asList(technology1, technology4));
Project project3 = new Project(3, "CPM", Arrays.asList(technology2, technology5));
Person person1 = new Person(1, "Alex", 27, Arrays.asList(project1, project3));
Person person2 = new Person(2, "Ivan", 26, Arrays.asList(project2, project3));
Person person3 = new Person(3, "Andrii", 31, Arrays.asList(project1));
personRepository.save(Arrays.asList(person1, person2, person3));
}
@Test
public void count() {
List<Person> all = personRepository.findAll();
LOG.info("There are " + all.size() + " person(s) in database");
assertThat(all.size(), equalTo(3));
}
@Test
public void findByName() {
List<Person> personList = personRepository.findByName("Ivan");
LOG.info("*******Find by name********");
LOG.info("personList {}", personList);
LOG.info("***************************");
assertThat(personList, hasSize(1));
}
//another test methods
@After
public void shutDown() {
personRepository.deleteAll();
}
}
@Configuration
@EnableMongoRepositories
@ComponentScan
public class AppConfig {
@Bean
public MongoClient mongoClient() {
return new MongoClient("localhost", 27017);
}
@Bean
public MongoTemplate mongoTemplate() {
return new MongoTemplate(mongoClient(),"my-mongo");
}
}
现在我的问题是:我实际上不想在我存储数据的同一个数据库上运行一些测试。此外,我有一个重要的方法PersonRepository.deleteAll()
,在此之后,所有数据都将消失。我发现嵌入式mongodb是一种解决方案,但一旦将其添加到pom.xml
中,我就再也看不到已安装的数据库了。因此,问题是是否可以在同一台机器上同时安装和嵌入mongodb,如果不能,如何在不修改prod数据的情况下测试我的MongoRepository。
看来我找到了我所缺少的东西:
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<version>1.50.5</version>
<scope>test</scope>
</dependency>
简单地添加scope test就是启动我的嵌入式mongodb仅用于测试,而我仍然使用已安装的mongodb for Prod。
我有以下数据模型 和spring数据存储库接口 但findByIdIn方法返回一个空列表,即使mongodb中存在ID。我已经为文档中的其他字段测试了findbyxxin(),它们都工作得很好。但当涉及到文档id时,情况并非如此。 这是我第一次使用mongoDB,但我熟悉Spring data jpa。 我知道 但我还需要对结果应用分页,因此对我的情况没有帮助。 我尝试使用@Query(带有in查
UserRepository如下所示: 我得到以下异常: 无法实例化[...Repository.UserRepository]:指定的类是接口 我的CustomerRepository如下所示(带有@configuration注释): 实际上,我不知道为了让测试运行,我需要哪些注释--也许您会有另一个建议,以便我可以解决这个问题。
本文向大家介绍c# 插入数据效率测试(mongodb),包括了c# 插入数据效率测试(mongodb)的使用技巧和注意事项,需要的朋友参考一下 mongodb的数据插入速度是其一个亮点,同样的10000条数据,插入的速度要比Mysql和sqlserver都要快,当然这也是要看使用者怎么个使用法,你代码如果10000次写入使用10000次连接,那也是比不过其他数据库使用事务一次性提交的速度的。 同样
我正在使用spring数据与mongodb通信,我正在寻找一种执行地理查询的方法,该方法将通过DB中给定的地理点检索附近的纵断面,我对查询的要求如下: 1) 按距离限制2)按返回的配置文件数量限制3)根据配置文件文档中的时间字段进行额外搜索4)从检索到的文档中包括/排除字段的能力 起初我用mongoTemplate.geo接近法... 但是后来我意识到mongo不支持在Geo近东查询中包含/排除字
我正在尝试使用查询搜索出生日期 我如何才能搜索dob在等位日期格式?
有人知道如何使用Spring-Data将下面的聚合函数转换成java代码吗?