Java使用mongodb-driver来操作mongodb
创建新工程
创建新的demo工程,引入MongoDB的jar包的坐标:
<dependencies>
<!--mongo依赖-->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>3.6.3</version>
</dependency>
</dependencies>
编写测试代码(普通查询)
在测试包com.cxf.test.MongoTest中,编写如下的测试代码,用于遍历获取所有的数据:
// 连接mongo服务器
MongoClient mongoClient = new MongoClient("121.36.25.190",27017);
// 获取要操作的数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
//得到要操作的集合
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("spit");
//得到集合中的所有文档
FindIterable<Document> findIterable= mongoCollection.find();
//遍历
for (Document document:findIterable) {
System.out.println("内容为:"+document.getString("content"));
System.out.println("用户id为:"+document.getString("userid"));
System.out.println("访问量 :" +document.getInteger("visits"));
}
mongoClient.close();
默认的数据类型的浮点型,对应了java 的Double类型.
如果是用NumberInt存储的,那么就用java的Integer类型来接收.
如果是用双引号括起来的, 那么就用String类型接收
每一列的数据类型要固定, 不能乱变。
条件查询
等于条件查询
在测试类的main方法中,添加如下的代码,即代表了只查询userid为1013的数据.
封装了BasicDBObject 对象中, 把这个对象传递到find方法中,即代表了条件查询
//封装查询的条件
BasicDBObject basicDb = new BasicDBObject("userid", "1013");
//得到集合中的所有文档
FindIterable<Document> findIterable= mongoCollection.find(basicDb);
完整的代码:
/**
* @description:
* @author:柴新峰
* @create:2020/9/7
*/
public class MongoTest {
public static void main(String[] args) {
// 连接mongo服务器
MongoClient mongoClient = new MongoClient("121.36.25.190",27017);
// 获取要操作的数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
//得到要操作的集合
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("spit");
//封装查询的条件
BasicDBObject basicDb = new BasicDBObject("userid", "1013");
//得到集合中的所有文档
FindIterable<Document> findIterable= mongoCollection.find(basicDb);
//遍历
for (Document document:findIterable) {
System.out.println("内容为:"+document.getString("content"));
System.out.println("用户id为:"+document.getString("userid"));
System.out.println("访问量 :" +document.getInteger("visits"));
}
mongoClient.close();
}
}
结果输出:
大于条件查询
查询访问量大于1000的数据
如果用命令来查询大于1000的数据,那么命令如下
db.spit.find({visits:{$gt:1000}})
可以看到是用两个{}的,因此在代码中,就对应了两个BasicDBObject 对象
代码如下
在BasicDBObject对象中嵌套一个BasicDBObject,嵌套的对象用于写入大于的条件。
完整代码如下:
package com.tensquare;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
/**
* @description:
* @author:柴新峰
* @create:2020/9/7
*/
public class MongoTest {
public static void main(String[] args) {
// 连接mongo服务器
MongoClient mongoClient = new MongoClient("121.36.25.190",27017);
// 获取要操作的数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
//得到要操作的集合
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("spit");
//封装查询的条件
BasicDBObject basicDb = new BasicDBObject("visits", new BasicDBObject("$gt",1000));
//得到集合中的所有文档
FindIterable<Document> findIterable= mongoCollection.find(basicDb);
//遍历
for (Document document:findIterable) {
System.out.println("内容为:"+document.getString("content"));
System.out.println("用户id为:"+document.getString("userid"));
System.out.println("访问量 :" +document.getInteger("visits"));
System.out.println("****************************************************");
}
mongoClient.close();
}
}
结果输出:
添加数据到mongo中
通过查看Document的源码,发现其构造方法可以传入一个map,因此通过 map来封装插入的数据.
源码如下:
public Document() {
this.documentAsMap = new LinkedHashMap();
}
public Document(String key, Object value) {
this.documentAsMap = new LinkedHashMap();
this.documentAsMap.put(key, value);
}
public Document(Map<String, Object> map) {
this.documentAsMap = new LinkedHashMap(map);
}
完整代码如下:
package com.tensquare;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.HashMap;
import java.util.Map;
/**
* @description:
* @author:柴新峰
* @create:2020/9/7
*/
public class MongoTest {
public static void main(String[] args) {
// 连接mongo服务器
MongoClient mongoClient = new MongoClient("121.36.25.190", 27017);
// 获取要操作的数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
//得到要操作的集合
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("spit");
Map<String, Object> map = new HashMap<String, Object>();
map.put("_id", "9");
map.put("content", "测试mongo的添加");
map.put("userid", "1");
map.put("visits", "5000");
Document documentMap = new Document(map);
//spit为操作的集合,相当于操作的表
mongoCollection.insertOne(documentMap);
//得到集合中的所有文档
FindIterable<Document> findIterable = mongoCollection.find();
//遍历
for (Document document : findIterable) {
System.out.println("内容为:" + document.getString("content"));
System.out.println("用户id为:" + document.getString("userid"));
System.out.println("访问量 :" + document.getInteger("visits"));
System.out.println("****************************************************");
}
mongoClient.close();
}
}
结果如下: