MongoDB 目前非常流行,在最近的DB-Engine排名中居第5位,仅次于传统的关系型数据库如 Oracle、Mysql。 ?...从下之上,分别是: 数据库层; 驱动层(JDBC/Driver); ORM层(Repository); 三、整合 MongoDB CRUD 接下来的篇幅,主要针对如何在项目中使用框架进行MongoDB...数据操作 ORM 框架可以让你通过操作对象来直接影响数据,这样一来,可以大大减少上手的难度,你不再需要熟悉大量驱动层的API了。...return null; } return bookRepository.findOneByTitle(title); } /** * 获取投票排行列表...自定义序列化 一些基础的字段类型,如 int 、long、string,通过JDK 装箱类就可以完成, 对于内嵌的对象类型,SpringDataMongo框架会将其转换为 DBObject对象(java
数据库(Database):和关系型数据库一样,每个数据库中有自己的用户权限,不同的项目组可以使用不同的数据库 集合(Collection): 集合指的是文档组(类似于 Mysql 中的表的概念),里面可以存储许多文档...System.out.println("查询结果:" + result.toString()); } } 根据条件查询集合中符合条件的文档,获取其文档列表并排序 @RunWith(SpringRunner.class...; /** * 根据条件查询集合中符合条件的文档,获取其文档列表并排序 */ @Test public void findByConditionAndSort.../ 获取集合中所有列表 ListIndexesIterable indexList = mongoTemplate.getCollection("persons")....("索引列表:" + document); } } } 我们还可以通过在实体类上加注解方式来创建索引 /** * 使用@Document注解指定集合名称 */ @Document
具体特点总结如下: 面向集合存储,易于存储对象类型的数据 模式自由 支持动态查询 支持完全索引,包含内部对象 支持复制和故障恢复 使用高效的二进制数据存储,包括大型对象(...,语法与JavaScript的正则表达式相 同,{“x”:/[abc]/} 数组:数据列表或数据集可以表示为数组,{“x”: [“a“,“b”,”c”]} 内嵌文档:文档可以嵌套其他文档,被嵌套的文档作为值来处理...它不能直接在shell中使用。如果要 将非utf-字符保存到数据库中,二进制数据是唯一的方式。...update : update的对象和一些更新的操作符(如,inc....); //2、查询当前页的数据列表, 查询第二页,每页查询2条 Query queryLimit = new Query(criteria)
//查询分页推荐好友列表 public PageResult recommendation(RecommendUserDto dto) { //1、获取用户id Long userId...pr = recommendUserApi.queryRecommendUserList(dto.getPage(),dto.getPagesize(),userId); //3、获取分页中的...对象 Criteria criteria = Criteria.where("toUserId").is(toUserId); //2、创建Query对象 Query query...: 对于数据量大而言,显然不能够使用关系型数据库进行存储,我们需要通过MongoDB进行存储 对于读多写少的应用,需要减少读取的成本 比如说,一条SQL语句,单张表查询一定比多张表查询要快...PageResult中的item列表对象 List items = (List) pr.getItems(); //3、非空判断 if(items
具体特点总结如下: 面向集合存储,易于存储对象类型的数据 模式自由 支持动态查询 支持完全索引,包含内部对象 支持复制和故障恢复 使用高效的二进制数据存储,包括大型对象(...,语法与JavaScript的正则表达式相 同,{“x”:/[abc]/} 数组:数据列表或数据集可以表示为数组,{“x”: [“a“,“b”,”c”]} 内嵌文档:文档可以嵌套其他文档,被嵌套的文档作为值来处理...它不能直接在shell中使用。如果要 将非utf-字符保存到数据库中,二进制数据是唯一的方式。...update : update的对象和一些更新的操作符(如,inc....) * 3、注入MongoTemplate对象 * 4、调用对象方法,完成数据库操作 */ @Autowired private MongoTemplate
从几何中查询对象 * @param id * @return */ public T queryById(Integer id) { Query query...= criteria) { Query query = new Query(criteria); T obj = this.mongoTemplate.findOne...(criteria); return query; } /** * 将查询条件对象转换为update * * @param object...update.set(filedName, filedValue); } } return update; } /*** * 获取对象属性返回字符串数组...fieldNames[i] = fields[i].getName(); } return fieldNames; } /*** * 根据属性获取对象属性值
" 可以看到,在Redis中的数据是有多个发布id组成(pid)由逗号分隔。...所以实现中需要自己对这些数据做分页处理。...从redis获取当前用户的推荐PID列表 如果不存在,调用API随机获取10条动态数据 如果存在,调用API根据PID列表查询动态数据 构造VO对象 API层编写方法...数据库表:quanzi_comment 将数据记录到表中:保存到MongoDB中 互动表需要几张:需要一张表即可(quanzi_comment) 里面的数据需要分类:通过字段commentType 1-...comment 互动完成(点赞,喜欢):不仅要将数据保存到mongo中,需要记录到redis中 页面查询圈子列表时,可以从redis中判断是否有点赞,和喜欢历史 2.1、环境搭建 2.1.1
如果已经喜欢或不喜欢的用户在列表中不再显示。...criteria = Criteria.where("toUserId").is(userId).and("userId").nin(likeUserIdS); //3、使用统计函数,...redis中,为了防止redis中的数据丢失,同时需要将数据保存到mongodb进行持久化保存。...2d : 使用2d index 能够将数据作为二维平面上的点存储起来,在MongoDB 2.4以前使用2。...GeoResults results = mongoTemplate.geoNear(query, Places.class); //4、解析GeoResult对象,获取距离和数据
引言 springboot2.x已经集成了Mongodb了,我们可以很方便的使用mongoTemplate获取MongoDB中的数据,但有时候光是MongoTemplate还不够便捷,我们完全可以根据需要做一些简单的接口来简化日常开发操作...mongoTemplate; /** * 功能描述: 创建一个集合 * 同一个集合中可以存入多个不同类型的对象,我们为了方便维护和提升性能, * 后续将限制一个集合中存入的对象类型...(info, collectionName); } /** * 功能描述: 往对应的集合中批量插入数据,注意批量的数据中不要包含重复的id * * @param...(infos, collectionName); } /** * 功能描述: 使用索引信息精确更改某条数据 * * @param id...} /** * 功能描述: 查询列表信息 * 将集合中符合对象类型的数据全部查询出来 * * @param collectName 集合名称
,则创建数据库,否则切换到指定数据库 3、 查询所有数据库 show dbs; 4、 删除当前使用数据库 db.dropDatabase(); 5、 查看当前使用的数据库 db.getName(); 6...你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 Object ID 对象 ID。用于创建文档的 ID。 Binary Data 二进制数据。用于存储二进制数据。 Code 代码类型。..., objNew, upsert, mult) criteria:需要更新的条件表达式 objNew:更新表达式 upsert:如 FI 标记录不存在,是否插入新文档。...(query, User.class): 删除 mongoTemplate.insert(User): 新增 Query 对象 1、创建一个 query 对象(用来封装所有条件对象),再创建一个 criteria...对象(用来构建条件) 2、精准条件:criteria.and(“key”).is(“条件”) 模糊条件:criteria.and(“key”).regex(“条件”) 3、封装条件:query.addCriteria
环境准备 在正式开始之前,先准备好环境,搭建好工程,对于这一步的详细信息,可以参考博文: 181213-SpringBoot高级篇MongoDB之基本环境搭建与使用 接下来,在一个集合中,准备一下数据如下...根据字段进行查询 最常见的查询场景,比如我们根据查询user=一灰灰blog的数据,这里主要会使用Query + Criteria 来完成 @Component public class MongoReadWrapper...(xxx).is(xxx)来指定具体的查询条件 封装Query对象 new Query(criteria) 借助mongoTemplate执行查询 mongoTemplate.findOne(query...,这个与and的使用有些区别, 借助org.springframework.data.mongodb.core.query.Criteria#orOperator来实现,传参为多个Criteria对象,...小结 上面给出的一些常见的查询姿势,当然并不全面,比如我们如果需要查询document中的部分字段怎么办?比如document内部结果比较复杂,有内嵌的对象或者数组时,嵌套查询可以怎么玩?
背景 本节使用 Java 操作 mongDB。 2.知识 MongoDB 简介 MongoDB是一个文档型数据库,它将数据存储在类似json的文档中。...特点: 数据以JSON方式存储,处理数据最自然,支持数组和嵌套对象。 查询也以JSON方式,支持筛选和排序,聚合。...Spring Data MongoDB 简介 我们使用 Spring Data MongoDB 类库来操作 MongoDB。...在开发过程中忘记这样做是很常见的,然后最终得到一个看起来运行成功的应用程序,而实际上,数据库并没有按照您的预期进行修改。...默认值是使用 的WriteResultChecking值NONE。
使用起来也非常方便,可直接将MongoTemplate作为类中的属性来使用。...); 返回的用户对象具有与数据库中初始状态相同的值。..., collectionName) 我们使用此方法从数据库集合中使用PK(ID)获取数据。...User user= mongoTemplate.findById(1, User.class); 10、findAndRemove(query, entityClassName) 删除实际从查询条件中获取的数据...); 11、总结: 四、数据查询 上面的示例中我们使用Query对象来查询数据 1、常用数据查询 Query对象 1、 创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(
今天我们学习下DBRef的使用,用过mongodb的都知道mongodb不能做关联查询,关系型数据库中是可以的,当然我们不要用关系型数据库的思想来用nosql。 但是实际应用中也是会有类似的需求的。...班级集合中嵌套学生信息: { "_id": ObjectId("57fa3f22d4c63d5f5c416ee2"), "className": "五年级一班", "students...,班级有了学生对象中的班级才能引用到,因为引用是通过_id来的。...(classObj); 在李学生加入班级后,马上把班级集合中的学生List对象改掉,这样班级中也就存在了对这个学生的引用信息, 这样就会比较麻烦。...$id mongoTemplate.find( Query.query(Criteria.where("classObj.
2、你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。...查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 6、MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。...你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 Object ID 对象 ID。用于创建文档的 ID。 Binary Data 二进制数据。用于存储二进制数据。...db.collection.update(criteria, objNew, upsert, mult) criteria:需要更新的条件表达式 objNew:更新表达式 upsert:如FI标记录不存在...(query, User.class): 删除 mongoTemplate.insert(User): 新增 Query对象 创建一个query对象(用来封装所有条件对象),再创建一个criteria对象
11.6.1.查询集合中的文档 早些时候,我们看到了如何使用findOne和findById方法检索单个文档MongoTemplate。这些方法返回单个域对象。...我们还可以查询要作为域对象列表返回的文档集合。...使用properties架构的属性来匹配嵌套字段。 Criteria bits()是MongoDB 按位查询运算符(如$bitsAllClear....以下查询方法可让您查找一个或多个文档: findAll:T从集合中查询类型对象的列表。 findOne:将集合上的即席查询的结果映射到指定类型的对象的单个实例。...11.6.3.查询不同的值 MongoDB 提供了一种操作,通过使用来自结果文档的查询来获取单个字段的不同值。结果值不需要具有相同的数据类型,该功能也不限于简单类型。
使用 group 操作确实有一些限制,例如它在共享环境中不受支持,它返回单个 BSON 对象中的完整结果集,因此结果应该很小,少于 10,000 个键。...下面显示了一个使用Criteria对象的示例,其中包含一些使用静态导入的语法糖,以及通过 Spring 资源字符串引用 key-function 和 reduce function javascript...可以通过类的project方法定义投影表达式Aggregation,通过传递String对象列表或聚合框架Fields对象。...聚合框架示例 1 在这个介绍性示例中,我们希望聚合一个标签列表,以从 MongoDB 集合(称为tags)中获取特定标签的出现次数,并按出现次数降序排序。...因为我们想City在我们的输出类中填充嵌套结构,我们必须使用嵌套方法发出适当的子文档。 StateStats在sort操作中按升序按状态名称对结果列表进行排序。
Spring Data Mongodb 使用Spring Data 框架都是按照面向对象思想操作用于的工具。...使用Spring Data Mongodb 也是使用面向对象的方式进行操作MongoDB,省略了使用Mongodb的Java客户端API把Document转换为实体类的过程 搭建项目环境 创建项目 创建项目...(people); } 修改文档 在Mongodb中无论是使用客户端API还是使用Spring Data,更新返回结果一定是受影响行数。...如果使用对象方式进行修改(save方法)必须要保证对象中所有属性都是有值得,否则只能使用update方法 使用save修改 使用save时,如果主键值已经存在,则表示修改操作。...(list); } 查询单个对象 如果查询结果是多个,返回其中第一个文档对象 @Test voidselectOne(){ // 获取到结果中第一条数据 // new Query() 表示没有条件 **
, 14 9月 2021 作者 847954981@qq.com 后端学习 Spring Data CRUD(MongoDB) 对数据库的操作一定要放在@Service 类中,而不是放在 @Controller... 类中;且 @Controller 类可以调用 @Service 类的方法,反之则不行。...(song); } 先自动注入 mongoTemplate 再通过.insert() 方法来完成数据插入 查询数据 使用: mongoTemplate.findById(songId, Song.class..., Song.class); // 修改的记录数大于 0 ,表示修改成功 System.out.println("修改的数据记录数量:" + result.getModifiedCount()); 先使用条件对象...Criteria 构建条件对象 Query 实例,然后在调用修改对象 Update 的方法 .set() 最后调用 mongoTemplate.updateFirst(query, updateData
您还可以使用特定的集合名称调用保存操作。您可以使用映射元数据来覆盖存储对象的集合。 插入或保存时,如果Id未设置该属性,则假设其值将由数据库自动生成。...使用 MongoTemplate 插入和检索文档 import static org.springframework.data.mongodb.core.query.Criteria.where; import...您还可以通过提供您自己的集合名称作为所选MongoTemplate方法调用的最后一个参数来覆盖集合名称。 插入或保存单个对象 MongoDB 驱动程序支持在单个操作中插入文档集合。...它们在单个批量写入数据库中插入对象列表。...使用 MongoTemplate import static org.springframework.data.mongodb.core.query.Criteria.where; import static
领取专属 10元无门槛券
手把手带您无忧上云