MongoDB学习(四):通过Java使用MongoDB
环境配置
在Java项目中使用MongoDB,需要在项目中引入mongo.jar这个包。下载地址:下载
请尽量下载较新的版本,本文用的是2.10.1。
连接MongoDB
public synchronized static DB getDBConnection() throws UnknownHostException{
if(db == null){
MongoClient client = new MongoClient(DB_SERVER_IP, DBSERVER_PORT);
db = client.getDB(DB_NAME);
System.out.println("GET DBCONNECTION SUCCESSFUL");
}
return db;
}
其中IP和PORT分别是数据库服务端的IP和端口号。
创建集合
public static DBCollection getCollection(String colName){
col = db.getCollection(colName);
if(col == null){
col = db.createCollection(colName, null);
}
return col;
}
插入文档
插入数据有4中方式可选:1.利用DBObjcet,2.利用DBObjectBuilder, 3.先创建Map对象,再用Map对象构造DBObject,4.直接通过json对象创建。
这里我们主要介绍第一种方式——利用DBObject插入。DBObject是一个接口,继承自BSONObject,是可被存入数据库的一个键值的Map。这里我们使用它的基本实现:BasicDBObject。
public static void insert(){
DBCollection col = getCollection("myCollection1");
if(col != null){
DBObject o = new BasicDBObject();
o.put("name", "Z");
o.put("gender", "f");
o.put("age", 1);
col.insert(o);
}
}
另外,你也可以使用BasicDBObject提供的append()函数,来为对象插入键值对。
当你需要批量插入数据时,可以使用DBCollection.insert(List<DBObject> list);
查询文档
可以通过DBCollection.find()来查询集合中的文档。该函数返回一个游标DBCursor。通过对其迭代输出,就可以得到文档组。或者是通过DBCursor.toArray()直接转成DBObject的列表List<DBObject>。代码如下:
public static void search(){
DBCollection col = getCollection("myCollection1");
if(col != null){
DBCursor cursor = col.find();
while(cursor.hasNext()){
DBObject o = cursor.next();
System.out.println(o);
}
}
}
public static void search(){
DBCollection col = getCollection("myCollection1");
if(col != null){
List<DBObject> list = col.find().toArray();
}
}
当然,也可以设置查询条件,并对输出结果的字段进行限制:
public static void search2(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//查询条件
DBObject query = new BasicDBObject();
query.put("gender", "m");
//输出结果是否有要输出某个字段。0表示不输出,1表示只输出该字段
DBObject field = new BasicDBObject();
field.put("name", 1);
DBCursor cursor = col.find(query,field);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
}
}
上述代码就表示查询性别为m的全部文档,并输出其姓名。
较复杂的条件查询:
public static void search2(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//查询条件
DBObject query = new BasicDBObject();
DBObject o = new BasicDBObject("$lt",24).append("$gt", 21);
query.put("age", o);
DBCursor cursor = col.find(query);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
}
}
这里我们筛选的是年龄小于24且大于21的全部文档。
更新文档
public static void update1(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//查询条件
DBObject query = new BasicDBObject();
query.put("name", "A");
//用来替换的文档
DBObject newObject = new BasicDBObject();
newObject.put("name", "A1");
col.update(query, newObject);
}
}
这里我们将name这个字段等于A的文档替换成了name字段为A1的值,注意的是,新的文档将不包含旧文档的其他字段,是真正意义上的两个文档的替换,而非替换相同字段!另外一点需要注意的是,该方法只替换第一条符合查询条件的文档。因为multi的默认值为false,可以通过设置这个值为true来修改多条。
findAndModity(DBObject query, DBObject fields, DBObject sort, boolean remove, DBObject update,boolean returnNew,boolean upsert)也提供了类似的功能。
query - query to match
fields - fields to be returned
sort - sort to apply before picking first document
remove - if true, document found will be removed
update - update to apply
returnNew - if true, the updated document is returned, otherwise the old document is returned (or it would be lost forever)upsert - do upsert (insert if document not present)
删除文档
删除指定的一个文档:
public static void remove1(){
DBCollection col = getCollection("myCollection1");
if(col != null){
DBObject o = col.findOne();
col.remove(o);
}
}
删除符合某条件的文档:
public static void remove2(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//条件
DBObject query = new BasicDBObject();
query.put("name", "A1");
col.remove(query);
}
}
会删除符合条件的全部文档。
如需要删除集合下的全部文档时,可结合DBCursor实现。
参考:
API文档:http://api.mongodb.org/java/2.10.1/
其他资料:菜鸟教程
http://blog.csdn.net/hx_uestc/article/details/7620938
MongoDB学习(四):通过Java使用MongoDB的更多相关文章
- MongoDB学习:(二)MongoDB简单使用
MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...
- MongoDB学习:(一)MongoDB安装
MongoDB学习:(一)MongoDB安装 MongoDB介绍: 直接百科了: MongoDB安装: 1:下载安装: MongoDB安装:https://www.mongodb.com/do ...
- MongoDB学习笔记—Linux下搭建MongoDB环境
1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- MongoDB(六)java操作mongodb增删改查
java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...
- MongoDB 学习笔记(三) MongoDB (replica set) 集群配置
MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 Mo ...
- [linux][MongoDB] mongodb学习(一):MongoDB安装、管理工具、
参考原文:http://www.cnblogs.com/kaituorensheng/p/5118226.html linux安装完美实现! 1. mongoDB安装.启动.关闭 1.1 下载安装包 ...
- MongoDB学习1:认识文档数据库MongoDB
1. 关于MongoDB 什么是MongoDB 一个以JSON为数据模型的文档数据库 为什么叫文档数据库 文档来自于"JSON Document",并非我们一般理解的pdf,wor ...
- [转载]MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
本文介绍数据库的4个基本操作:创建.读取.更新和删除(CRUD). 接下来的数据库操作演示,我们使用MongoDB自带简洁但功能强大的JavaScript shell,MongoDB shell是一个 ...
- 【MongoDB学习之五】Java中使用MongoDB
环境 MongoDB 3.0 CentOS6.5_x64 相关jar:mongo-java-driver-3.0.0.jar package com.mongodb; import java.util ...
随机推荐
- Python操作Oracle数据库:cx_Oracle
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 混合app禁止切换输入法英文键盘方案
前言 在此介绍的是h5的部分,非原生,原生可以直接属性禁止. 需求 禁止中文出现在input中.(如果你认为不显示出来中文,那么请往下看) 效果:只显示英文键盘. 遇到的问题 1.在三星低版本上会出现 ...
- scratch 如何改变变量的作用域
在新建变量的时候,有个选项是“适用于所有角色”还是“仅适用于当前角色”.通常称前者为全局变量,所有角色都可以访问到这个变量:后者,称为局部变量,只能在当前角色里访问到这个变量.例如,在使用克隆功能时, ...
- python--模块、列表生成式、集合元祖列表
一.导入模块的两种方式 1.直接使用import import 模块名 #调用 模块名.方法名() 2.使用from…import… from 模块名 import 方法名1,方法名2(from 模块 ...
- pip 命令参数以及如何配置国内镜像源
文章更新于:2020-04-05 注:如果 pip 命令不可以用,参见:python pip命令不能用 文章目录 一.参数详解 1.命令列表 2.通用参数列表 二.实际应用 1.常用命令 2.`pip ...
- Linux Shell编程,双括号运算符(())
双括号运算符是shell非常强大的扩展. 这里简要介绍两种使用方式: 1.条件判断 跟在if.while.until,for等需要逻辑条件的命令后,进行逻辑判断 if(( expr));then … ...
- Jenkins构建项目后发送钉钉消息推送
前言 钉钉是我们日常工作的沟通工具,在Jenkins构建持续集成项目配合钉钉机器人的功能,可以让我们在持续集成测试环节快速接收到测试结果的消息推送. 一:新建一个钉钉群,选择自定义机器人 二:添加机器 ...
- 十年测试老鸟告诉你--自动化测试选JAVA还是选Python--写给还在迷茫中的朋友
一.前言 Python和Java哪个更适合做自动化测试?这是很多测试工程师从功能跨入自动化纠结的问题,今天测试老鸟来带大家详细分析一下!写给还在迷茫中的朋友! 首先可以确认的是提出这个问题的肯定是一个 ...
- CVPR2020文章汇总 | 点云处理、三维重建、姿态估计、SLAM、3D数据集等(12篇)
作者:Tom Hardy Date:2020-04-15 来源:CVPR2020文章汇总 | 点云处理.三维重建.姿态估计.SLAM.3D数据集等(12篇) 1.PVN3D: A Deep Point ...
- 中阶d03.1 JDBCDemo
1. jdbc使用查看驱动的doc文档<connector-j.html> 2.代码实现:1. 注册驱动---2. 建立连接---3. 创建statement ,跟数据库打交道--- -- ...