文章目录
实验环境
mongoDB安装环境:ubuntu18.04
Java编程环境:IDEA
JDK版本:1.8
实验内容
实验准备
创建maven项目
这里的Archetype随便选择一个
这是创建好的大致目录:
将不需要的文件删除
pom文件内不需要的也删除后pom文件内的内容
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>NoSQL</artifactId>
<version>1.0-SNAPSHOT</version>
<name>NoSQL Tapestry 5 Application</name>
<packaging>jar</packaging>
</project>
之后再创建一个子maven项目(可有可无),总体的项目结构:
引入mogodb的maven依赖:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.1</version>
</dependency>
之后创建一个资源文件
之后对mongodb进行配置,以我安装的mongodb为例,配置文件在/etc/mongodb.conf下,一般在Linux上安装的都在这。
vim /etc/mongodb.conf
修改配置文件,加上bind_ip和port
之后重启mongodb
systemctl restart mongodb
在IDEA内创建的资源文件mongodb.properties内编写
host=mongodb所在主机ip
port=先前设置的端口
dbname=需要进行连接的数据库名称
编写测试代码:
连接的工具类MongoUtils:
package com.utils;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class MongoDBUtils {
private static Properties properties;
private static MongoDatabase mongoDatabase;
private static InputStream stream = null;
private static String host;
private static int port;
private static String dbname;
static {
if (properties == null) {
properties = new Properties();
}
try {
stream = MongoDBUtils.class.getClassLoader().getResourceAsStream("mongodb.properties");
properties.load(stream);
} catch (IOException e) {
throw new RuntimeException(e);
}
host = properties.getProperty("host");
port = Integer.parseInt(properties.getProperty("port"));
dbname = properties.getProperty("dbname");
}
public static MongoClient getMongoClient() {
String addr = "mongodb://" + host + ":" + port;
MongoClient mongoClient = MongoClients.create(addr);
return mongoClient;
}
public static MongoDatabase getMongoConn() {
MongoClient mongoClient = getMongoClient();
mongoDatabase = mongoClient.getDatabase(dbname);
return mongoDatabase;
}
}
测试连接Test1:
package test;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import com.utils.MongoDBUtils;
public class Test1 {
public static void main(String[] args) {
MongoDatabase mongoConn = MongoDBUtils.getMongoConn();
MongoIterable<String> strings = mongoConn.listCollectionNames();
for (String string : strings) {
System.out.printf("collection name [%s]\n", string);
}
}
}
测试连接的类Test1的输出:
输出对应的数据库内的所有集合,成功。
关闭Java操控MongoDB的控制台日志
在MongoUtils类中加入一个方法
public static void closeLog() {
Logger logger = Logger.getLogger("org.mongodb.driver");
logger.setLevel(Level.OFF);
}
然后在需要关闭日志的时候调用这个方法就行
查看数据库
创建一个类用来编写主要的操作MongoDB的方法
MongoOptions:
package com;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
public class MongoOptions {
private MongoDatabase database = null;
private MongoClient client;
public MongoOptions(MongoDatabase database, MongoClient client) {
this.database = database;
this.client = client;
}
public MongoOptions(MongoClient client) {
this.client = client;
}
public void show_dbs() {
MongoIterable<String> dbs = client.listDatabaseNames();
System.out.println("------------show dbs--------------");
for (String db : dbs) {
System.out.printf("dbname %s\n", db);
}
}
}
;
主要用来测试的类Test1:
package test;
import com.MongoOptions;
import com.utils.MongoDBUtils;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.show_dbs();
}
}
运行结果:
查看指定数据库的集合
在MongoOptions类中加入两个方法
public void show_collections() {
MongoIterable<String> collections = database.listCollectionNames();
MongoCursor<String> iterator = collections.iterator();
System.out.println("-----------show collections-------------");
while (iterator.hasNext()) {
System.out.printf("collection %s\n", iterator.next());
}
}
public void use_db(String dbname) {
this.database = client.getDatabase(dbname);
}
测试类Test1
package test;
import com.MongoOptions;
import com.utils.MongoDBUtils;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.use_db("test");
mongoOptions.show_collections();
}
}
运行结果:
创建集合
在MongoOptions类加入一个方法
public void create_collection(String collection_name) {
System.out.printf("-------create collection %s------\n", collection_name);
database.createCollection(collection_name);
}
测试类Test1:
package test;
import com.MongoOptions;
import com.utils.MongoDBUtils;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.use_db("test");
mongoOptions.create_collection("second");
mongoOptions.show_collections();
}
}
运行结果:
删除集合
在MongoOptions类添加一个方法
public void drop_collection(String collection_name) {
System.out.printf("----------drop collection %s----------\n", collection_name);
MongoCollection<Document> collection = database.getCollection(collection_name);
collection.drop();
}
测试类Test1
package test;
import com.MongoOptions;
import com.utils.MongoDBUtils;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.use_db("test");
mongoOptions.drop_collection("second");
mongoOptions.show_collections();
}
}
运行结果:
查看文档
在MongoOptions类增加一个方法
public void collection_find(String collection_name) {
System.out.printf("--------------collection find(%s)----------\n", collection_name);
MongoCollection<Document> collection = database.getCollection(collection_name);
FindIterable<Document> documents = collection.find();
MongoCursor<Document> iterator = documents.iterator();
while (iterator.hasNext()) {
System.out.printf("------------document------------\n");
System.out.println(iterator.next());
}
}
测试类Test1:
import com.MongoOptions;
import com.utils.MongoDBUtils;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.use_db("test");
mongoOptions.collection_find("firstCollection");
}
}
运行结果:
插入文档
在MongoOptions类增加两个方法
public void collection_insertOne(String collection_name, Document document) {
System.out.printf("--------------collection insert(%s)----------\n", collection_name);
MongoCollection<Document> collection = database.getCollection(collection_name);
collection.insertOne(document);
}
public void collection_insertMany(String collection_name, List<Document> documents) {
System.out.printf("--------------collection insertMany(%s)----------\n", collection_name);
MongoCollection<Document> collection = database.getCollection(collection_name);
collection.insertMany(documents);
}
测试类Test1(这里没有测试多个插入):
import com.MongoOptions;
import com.utils.MongoDBUtils;
import org.bson.Document;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.use_db("test");
Document document = new Document();
document.append("_id", "999")
.append("articleId", "100001")
.append("content", "no thing")
.append("name", "xll")
.append("tag", "26");
mongoOptions.collection_insertOne("firstCollection", document);
mongoOptions.collection_find("firstCollection");
}
}
运行结果:
更新文档
在MongoOptions内增加一条方法
public void collection_update(String collection_name, String fieldName, String value, Document newDoc) {
System.out.printf("--------------collection update(%s)----------\n", collection_name);
MongoCollection<Document> collection = database.getCollection(collection_name);
collection.updateOne(Filters.eq(fieldName, value), new Document("$set", newDoc));
}
测试类Test1:
import com.MongoOptions;
import com.utils.MongoDBUtils;
import org.bson.Document;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.use_db("test");
Document newDoc = new Document();
newDoc.append("tag", "03").append("newKey", "01");
mongoOptions.collection_update("firstCollection", "tag", "26", newDoc);
mongoOptions.collection_find("firstCollection");
}
}
运行结果:
删除文档
在MonogOptions类增加一个方法
public void collection_delete(String collection_name, String fieldName, String value) {
System.out.printf("--------------collection delete(%s)----------\n", collection_name);
MongoCollection<Document> collection = database.getCollection(collection_name);
collection.deleteOne(Filters.eq(fieldName, value));
}
测试类Test1:
package test;
import com.MongoOptions;
import com.utils.MongoDBUtils;
public class Test1 {
public static void main(String[] args) {
MongoDBUtils.closeLog();
MongoOptions mongoOptions = new MongoOptions(MongoDBUtils.getMongoClient());
mongoOptions.use_db("test");
mongoOptions.collection_delete("firstCollection", "tag", "03");
mongoOptions.collection_find("firstCollection");
}
}
运行结果:
完整代码下载
百度网盘:
链接:https://pan.baidu.com/s/1we_2sNB35df1BaasnBhNeQ?pwd=bNo1
提取码:bNo1
github:
https://github.com/waht-X/NoSQL-MongoDB.git
实验总结
遇到的问题
- 在连接mongodb的时候出现如下报错:
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70)
;
解决:将mongodb的配置文件内的bind_ip值修改未0.0.0.0,bind_ip值为127.0.0.1是不支持远程连接的,修改后重启mongodb服务即可。
参考
https://its301.com/article/weixin_44106334/107099338
https://blog.csdn.net/weixin_34327223/article/details/92598305