SHELL:这种查询方式是MongoDB数据库支持的查询方式。
JAVA DRIVER:是MongoDB Java驱动API中提供的查询方式
JONGO:就是jongo框架提供的查询方式。
由此可以看出,JONGO框架的意图很明显。
2、Jongo的下载
关于MongoDB的安装在此不作赘述,大家可以去它的官网上查看,介绍的非常详细了,http://docs.mongodb.org/manual/installation/。
在Jongo的官网上,介绍说jongo框架的使用依赖于 Jackson 2.2.3, Bson4Jackson 2.2.3 and Mongo Java Driver 2.11+,而jongo目前最新的版本为1.0。通过我的尝试,我发现在实际应用中需要用到以下jar包:
bson4jackson-2.3.1.jarjackson-annotations-2.4.1.jarjackson-core-2.4.1.1.jarjackson-databind-2.4.1.2.jarjongo-1.0.jarmongo-java-driver-2.12.2.jar
这些jar包都可以在Maven仓库中找到,http://mvnrepository.com/
<dependency>
<groupId>org.jongo</groupId>
<artifactId>jongo</artifactId>
<version>1.3.0</version>
</dependency>
2)Jongo的Save
PersonInfo personInfo = new PersonInfo(4,"Marry","Male","ClassMate");
mcoll.save(personInfo);
3)Jongo的Update
在Jongo中,Update语法和Mongo Shell有一点点不同,修改的查询语句需要通过使用with()来实现,with()内可以包含一个字符串,或者是一个对象。
(1)person_info.update(new ObjectId("53cb7d99b963ac657273328c")).with("{$inc: {id: 2}}");
原始记录:{ "_id" : ObjectId("53cb7d99b963ac657273328c"), "id" : 6, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate" }
更新后:{ "_id" : ObjectId("53cb7d99b963ac657273328c"), "id" : 8, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate" }
(2)person_info.update("{person_name : 'Dark'}").with("{$set:{person_name:'Dark Update'}}");
原始记录:{ "_id" : ObjectId("53cb7d91b963ac657273328a"), "id" : 5, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate" }
更新后:{ "_id" : ObjectId("53cb7d91b963ac657273328a"), "id" : 5, "person_name" : "Dark Update", "sex" : "Male", "relationship" : "ClassMate" }
这种Update方式只会改变第一个被找到的记录。而下面这种方式将会更新所有person_name为Dark的记录:
person_info.update("{person_name : 'Dark'}").multi().with("{$set:{person_name:'Dark Update'}}");
(3)person_info.update("{person_name : 'Dark'}").with(new PersonInfo(10, "Dark Update Object", "Man", "ClassMate"));
原始记录:{ "_id" : ObjectId("53cb82ebb963ac657273329d"), "id" : 5, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate" }
更新后:{ "_id" : ObjectId("53cb82ebb963ac657273329d"), "id" : 10, "person_name" : "Dark Update Object", "sex" : "Man", "relationship" : "ClassMate" }
(4)person_info.update("{person_name : 'Dark'}").with("{$set:{address:#}}",new Address("0755","shenzhen"));
原始记录:{ "_id" : ObjectId("53cb8310b963ac657273329e"), "id" : 5, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate" }
更新后:{ "_id" : ObjectId("53cb8310b963ac657273329e"), "id" : 5, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate", "address" : { "regionI d" : "0755", "provinceName" : "shenzhen" } }
4)Jongo的Insert
(1)person_info.insert("{person_name:'Insert Demo'}");
结果:{ "_id" : ObjectId("53cb85cf2fd87f4058d1ff93"), "person_name" : "Insert Demo" }
(2)插入一条记录
PersonInfo personInfo = new PersonInfo(6,"Marry Insert","Male","ClassMate");
person_info.insert(personInfo);
结果:{ "_id" : ObjectId("53cb85e0b963ac65727332a3"), "id" : 6, "person_name" : "Marry Insert", "sex" : "Male", "relationship" : "ClassMate" }
(3)插入多条记录:
PersonInfo personInfo2 = new PersonInfo(7,"Marry Insert2","Male","ClassMate");
person_info.insert(personInfo,personInfo2); //方式一
person_info.insert(new Object[]{personInfo,personInfo2});//方式二
5)Jongo的Remove
person_info.remove(); //删除所有
person_info.remove(new ObjectId("53cb87c02fd8f9ffd258ceb3"));
person_info.remove("{person_name:'Marry Insert'}");
6)Jongo的Query
在Jongo中,Query和Mongo Shell中的Query几乎是一致的。
我们先来看看在Mongo Shell中如何查询:
原始记录:{ "_id" : ObjectId("53cb8e8a2602b31118434306"), "id" : 2, "person_name" : "xiaohong", "sex" : "Male", "relationship" : "Friend" }
//对于数字类型
> db.person_info.find({id:2});
或者> db.person_info.find({"id":2});
{ "_id" : ObjectId("53cb8e8a2602b31118434306"), "id" : 2, "person_name" : "xiaohong", "sex" : "Male", "relationship" : "Friend" }
//对于字符串类型
> db.person_info.find({person_name:'xiaohong'});
或者> db.person_info.find({"person_name":"xiaohong"});
{ "_id" : ObjectId("53cb8e8a2602b31118434306"), "id" : 2, "person_name" : "xiaohong", "sex" : "Male", "relationship" : "Friend" }
那么,在Jongo中怎么查询呢?其实,在上面的第一个简单例子中我们已经见识过了,
Iterator<PersonInfo> all = (Iterator<PersonInfo>) person_info.find().as(PersonInfo.class);
PersonInfo one = (PersonInfo) person_info.findOne("{id:1}").as(PersonInfo.class);
我们再来看看这种文档结构:{ "_id" : ObjectId("53cb9015b963ac65727332a4"), "id" : 5, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate", "address" : { "regionI
d" : "0755", "provinceName" : "shenzhen" } },假如我要查询出address中regionId为0755的记录,该怎么做?
在Mongo Shell中,我们是这样查询的:db.person_info.find({"address.regionId":"0755"});或者db.person_info.find({'address.regionId':'0755'});
在Jongo中的做法也是如出一辙,
PersonInfo personInfo = (PersonInfo) person_info.findOne("{address.regionId:'0755'}").as(PersonInfo.class);
7)Jongo如何查询出指定字段(不查询某字段)?
我们一般通过{field:1}或{field:0}来控制查询字段的显示与否。
在Mongo Shell中,做法如下:
> db.person_info.find({},{person_name:1,_id:0}); //查询出person_name,不查询出_id。
{ "person_name" : "xiaohong" }
{ "person_name" : "Dark" }
而在Jongo中我们需要使用projection来到达这种效果。
PersonInfo personInfo =
(PersonInfo) person_info.findOne().projection("{person_name:1,id:1}").as(PersonInfo.class);
8)Jongo的Sort、Skip、Limit、Hint、Count
在Jongo中Sort、Skip、Limit、Hint、Count基本和Mongo Shell一致。
假设数据集合中有这样两天记录:
- > db.person_info.find()
- { "_id" : ObjectId("53cb8e8a2602b31118434306"), "id" : 2, "person_name" : "xiaohong", "sex" : "Male", "relationship" : "Friend" }
- { "_id" : ObjectId("53cb9015b963ac65727332a4"), "id" : 5, "person_name" : "Dark", "sex" : "Male", "relationship" : "ClassMate", "address" : { "regionI
- d" : "0755", "provinceName" : "shenzhen" } }
- Iterator<PersonInfo> sort = (Iterator<PersonInfo>) person_info.find().sort("{id:1}").as(PersonInfo.class);//sort {field:1} 升序,{field:-1} 降序
- Iterator<PersonInfo> skip = (Iterator<PersonInfo>) person_info.find().skip(1).as(PersonInfo.class);//查询时跳过多少条记录
- Iterator<PersonInfo> limit = (Iterator<PersonInfo>) person_info.find().limit(2).as(PersonInfo.class);//查询指定数量的记录
- Iterator<PersonInfo> hint = (Iterator<PersonInfo>) person_info.find().hint("{person_name:-1}").as(PersonInfo.class);//在查询过程中强制使用hint指定的索引方式,注意必须事先建立person_name字段的倒序索引。
- long len = person_info.count("{id:5}");//查询满足条件的记录数
9)Jongo的Oid
在映射部分,_id的定义可有注解@ObjectId来控制,如果你想完全地避免使用原先驱动包的ObjectId,可以使用Jongo提供的Oid类。其用法如下:
- import static org.jongo.Oid.withOid;
- PersonInfo personInfo= new PersonInfo(); // @ObjectId String _id PersonInfo类中需要定义一个名为_id的字段,且加上@ObjectId注解
- person_info.save(personInfo);
- person_info.find(withOid(personInfo._id)).as(PersonInfo .class); // instead of new ObjectId(personInfo._id)
10)Jongo的查询模板
几乎所有查询Jongo可以模板化:添加锚#。绑定参数可以BSON原语或任何复杂类型。
- PersonInfo personInfo = person_info.findOne("{id:#,person_name:#}",2,"xiaohong").as(PersonInfo.class); //相当于findOne("{id:2,person_name:'xiaohong'}")
- PersonInfo personInfo2 = person_info.findOne("{address:#}",new Address("0755","shenzhen")).as(PersonInfo.class); //相当于 db.person_info.findOne({'address.regionId':'0755','address.privinceName':'shenzhen'});
- Iterator<PersonInfo> ite = (Iterator<PersonInfo>) person_info.find("{id:{$in:#}}",ids).as(PersonInfo.class); //相当于db.person_info.find({id:{$in:[2,5]}});
11)Jongo的正则查询
以下几种正则查询都是等价的:
- PersonInfo personInfo1 =
- person_info.findOne("{person_name:{$regex:#}}","Dar.*").as(PersonInfo.class);
- PersonInfo personInfo2 =
- person_info.findOne("{person_name:{$regex:'Dar.*'}}").as(PersonInfo.class);
- PersonInfo personInfo3 =
- person_info.findOne("{person_name:#}",Pattern.compile("Dar.*")).as(PersonInfo.class);
- Pattern p = Pattern.compile("Dar.*");
- PersonInfo personInfo4 =
- person_info.findOne("{person_name:{$regex:'"+p+"'}}").as(PersonInfo.class);
12)Jongo的聚合操作
(1)Distinct
- List<String> personNames = person_info.distinct("person_name").as(String.class);
- List<Address> addresses = person_info.distinct("address").query("{id:5}").as(Address.class);
- int size = person_info.distinct("address").query("{id:5}").as(Address.class).size();
(2)聚合框架
这个特性只能在Mongo2.2以上版本中使用,所有诸如$project, $match, $limit, $skip, $unwind, $group, $sort的聚合操作都支持。在官网有一个例子:
collection.aggregate("{$project:{sender:1}}").and("{$match:{tags:'read'}}").and("{$limit:10}").as(Email.class);
4、对象映射
查询结果自动映射到对象,它依赖于Jackson,涉及文档结构,处理列表以及忽略缺失的属性。仅仅需要一个无参构造器(甚至私有构造器都行,前提是对象是不可变的,注解@JsonCreator可以用来替代)
_id在每个MongoDB文档中是一个唯一的标识符,如果没有被设定,它将自动生成,用Jongo来定义它时,一个属性需要被命名为_id或者带有@Id注解(别名 @JsonProperty("_id")),可以使用专门的ObjectId类或者一个简单的由@ObjectId注解的简单字符串来定义。
需要注意的是,当你保存一个自定义的文档_id时(任何Java类型,除了数组意外,只要它是唯一值)总是需要在持久化之前手动的去进行设置。
以下几种情形式需要手动设置_id的:
http://blog.csdn.net/whxaing2011/article/details/37997239
相关推荐
它的主要优点在于其代码的可读性和简洁性,可以直接通过方法调用来完成数据库查询,例如: ```java List<User> users = db.getCollection("users").find("{username : '#'}", "admin").as(User.class); ``` 然而,...
Java有JDBC用于关系型数据库操作,而对NoSQL数据库则可以使用如Jongo或Spring Data MongoDB等库。数据的持久化有助于快速查询和分析历史数据。 对于数据处理和分析,Java有许多强大的库,如Apache Commons Math提供...
4. **文件系统**:Java的File类和nio包提供了对文件系统的操作,可以用来保存文本、二进制数据等。 5. **序列化**:Java内置的序列化机制可以将对象转换为字节流,写入文件或网络,需要时再反序列化恢复为对象。 6...
3. **Morphia或Jongo等MongoDB Java驱动**:为了在Java应用中与MongoDB交互,开发者可能会使用Morphia或Jongo这样的库,它们提供了方便的API来操作MongoDB数据库。 4. **HTTP协议**:Servlet是基于HTTP协议工作的,...
蓝桥杯嵌入式十五届模拟1代码
该数据集收录了2007-2022年中国各省份绿色税收相关数据,涵盖总税收、资源税、环境保护税、城市维护建设税、城镇土地使用税、车船税、耕地占用税、消费税、车辆购置税等指标。绿色税收是以保护环境、合理开发利用自然资源为目的,对特定行为或产品征收的税费,旨在通过经济手段引导企业减排降污,促进资源合理利用和可持续发展。数据包含全国31个省级行政区的年度统计,其中环境保护税自2018年开征后,与资源税等共同构成绿色税收体系,通过"多排多征、少排少征"机制推动企业环保改造。部分数据存在缺失值,但整体可直接用于区域绿色税制比较、环境政策效果评估等研究。
该资源为joblib-0.9.0b4.tar.gz,欢迎下载使用哦!
Android开发根据标签外框颜色决定字体颜色以及选中后的背景色,这样颜色不同,好看,有点难度,关键在于如何自定义控件
blue_concrete_powder
Android开发仿抖音底部加载进度条效果,中间往外走的进度条,关键是自定义View
【3D文件】硬件开发之3D文件打印,3D生成器,咸蛋超人3D打印文件,5款不同的3D文件免费下载,总有一款适合你,光之铸型:咸蛋超人3D觉醒计划 资源图片查看链接:https://blog.csdn.net/weixin_60324241/article/details/147260889?spm=1011.2415.3001.5331
j
基于Springboot框架实现的学生选课管理系统,包含一种角色:管理员,系统分为前台登录和后台两大模块,主要功能如下。 【前台登录】: 1. 学生登录:学生可以通过学号和密码登录系统,查看自己的选课情况、成绩等信息。 2. 教师登录:教师可以通过工号和密码登录系统,查看自己的教授课程、学生评价等信息。 【后台模块】: 1. 选课管理:管理员可以管理课程信息,包括添加、编辑、删除课程信息,设置课程容量,调整课程时间表等。 2. 教评管理:管理员可以管理学生对教师的评价,包括查看评价结果、编辑评价内容等。 3. 教评问题管理:管理员可以管理教评中的问题,包括添加、编辑、删除问题,设置问题选项等。 4. 校建管理:管理员可以管理校园建筑信息,包括添加、编辑、删除校建信息,查看校园地图等。 5. 教师管理:管理员可以管理教师信息,包括添加、编辑、删除教师信息,查看教师评价等。 6. 学生管理:管理员可以管理学生信息,包括添加、编辑、删除学生信息,查看学生选课情况等。 7. 课程管理:管理员可以管理课程信息,包括添加、编辑、删除课程信息,查看课程详情等。 8. 成绩管理:管理员可以管理学生成绩,包括录入、编辑、删除成绩,查看学生成绩单等。 9. 校园新闻:管理员可以发布校园新闻,包括添加、编辑、删除新闻,查看新闻详情等。 10. 系统管理:管理员可以管理系统的用户账号和权限,包括添加、编辑、删除用户,设置用户权限等。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:HTML、Jquery、CSS、JavaScript、 后端技术:Spring、SpringMVC、MyBatis 三、运行环境 操作系统:Windows或者macOS JDK版本:最好是JDK1.8,其他版本理论上也可以 开发工具:IDEA、Ecplise
WINDOWS系统读取苹果分区的利器,支持HFS+及APFS分区。
1.通过提取docx需求文档有效标题的正文内容、表格及图片OCR结果,结合动态生成的提示词进行功能测试用例生成; 2.通过提取excel、yml或json格式的接口文档,结合提示词生成接口测试用例; 3.用例以json形式预览,支持导出为md、excel、json等格式; 4.安装部署简单,只需python环境即可,安装依赖库后即可运行; 5.需替换脚本里的api-key,模型调用阿里云百炼deepseek-r1的接口;
数据集介绍: 数据集包含五种美食图片,每种美食类型图片为1000张。
内容概要:本文详细介绍了LiteOS这一轻量级物联网操作系统,涵盖其特点、应用场景、开发环境搭建、内核机制、实战演练及进阶学习。LiteOS由华为开发,专为资源受限设备设计,具备轻量级、高效性、安全性和开放性等特点,适用于智能家居、工业自动化、智能穿戴和智能城市建设等领域。文章逐步讲解了Windows和Linux系统下搭建LiteOS开发环境的具体步骤,包括安装交叉编译器、HiSpark Studio、配置Python环境、下载并配置LiteOS SDK等。深入探讨了LiteOS内核的任务管理和内存管理机制,并通过Hello World程序展示了创建任务、编写代码、编译和烧录的完整流程。最后,介绍了SAL及socket编程,提供了丰富的学习资源,包括官方文档、技术论坛和开源代码库。 适合人群:具备一定编程基础,尤其是对物联网开发感兴趣的开发者,以及希望深入了解嵌入式操作系统原理的技术人员。 使用场景及目标:①学习如何在资源受限的设备上开发高效稳定的应用程序;②掌握LiteOS的任务管理、内存管理等核心机制;③通过实战演练和进阶学习,提高物联网设备的网络通信能力,如使用SAL及socket编程实现设备与服务器之间的TCP通信。 其他说明:本文不仅提供了理论知识,还结合具体代码示例和实际操作步骤,帮助读者更好地理解和应用LiteOS。物联网技术正处于快速发展阶段,掌握LiteOS开发技能将为开发者在智能家居、工业自动化、智能穿戴等领域提供强大的竞争力。
j
有轨装车机机行走机构设计分析.rar
该资源为h5py-3.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl,欢迎下载使用哦!