tar -zxvf mongodb-linux-x86_64-rhel70-4.2.23.tgz
vim /etc/profile
# 添加mongodb环境变量
export PATH=$PATH:/usr/local/mongodb/bin
# 重新加载配置文件
source /etc/profile
# 检查环境变量
echo $PATH
vim /etc/mongodb.conf
#指定数据库路径
dbpath=/usr/local/mongodb/data
#指定MongoDB日志文件
logpath=/usr/local/mongodb/logs/mongodb.log
# 使用追加的方式写日志
logappend=true
#端口号
port=27017
#方便外网访问,外网所有ip都可以访问,不要写成固定的linux的ip
bind_ip=0.0.0.0
fork=true # 以守护进程的方式运行MongoDB,创建服务器进程
#auth=true #启用用户验证
#bind_ip=0.0.0.0 #绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定则默认本地所有IP
启动
./mongod -f /etc/mongodb.conf
启动之后还不能访问,需要安装mongosh
连接mogodb,使用 mongosh
vi /etc/yum.repos.d/mongodb-org-6.0.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
yum install -y mongodb-mongosh
执行
mongosh
连接到不同端口
mongosh --port 28015
设置密码:
1.auth改为false
show dbs
test> show dbs
admin 40.00 KiB
config 12.00 KiB
local 72.00 KiB
查看用户
show users
#切换到admin数据库
use admin
#使用db.createUser()函数在admin数据库下创建用户
db.createUser({user:"root",pwd:"root",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})
#进行验证,认证通过返回:1
db.auth('root','root')
用户操作
#切换到admin数据库
use admin
#查看所有用户
db.system.users.find()
#使用db.createUser()函数在admin数据库下创建用户
db.createUser({user:"root",pwd:"root",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})
#删除用户 删除时需要切换到该账户所在的数据库
db.system.users.remove({user:"user"})
数据库操作
切换数据库,有则切换,没有则创建,
use DATABASE_NAME
查看所有的db,有些没有数据的DB是查询不到的
show dbs
查看当前DB名称
db
删除数据库
db.dropDatabase();
创建集合
db.createCollection("raintest")
查看集合
show tables
操作手册cdb.collection.find() — MongoDB Manual
Java 访问
官方提供的Java访问驱动maven版本
一个简单的示例:
import static com.mongodb.client.model.Filters.eq;
public class Mongodb {
public static void mongoQueryAll() {
String uri = "mongodb://192.168.182.142:27017";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
Document doc = collection.find(eq("title", "Back to the Future")).first();
if (doc != null) {
System.out.println(doc.toJson());
} else {
System.out.println("No matching documents found.");
}
MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();
for (String s : databaseNames) {
System.out.println(s);
}
// 2.打开数据库test
MongoDatabase db = mongoClient.getDatabase("raintest");
db.createCollection("test22222");
System.out.println("集合创建成功");
}
}
public static void main(String[] args) {
mongoQueryAll();
}
}
创建集合并添加document
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
</dependencies>
public class MongoDBJDBC {
public static void main(String[] args) {
try{
// 连接到 mongodb 服务
// MongoClient mongoClient = new MongoClient( "192.168.182.142" , 27017 );
String uri = "mongodb://192.168.182.142:27017";
MongoClient mongoClient = MongoClients.create(uri);
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("collection_test");
System.out.println( mongoDatabase.getCollection("coll_test1"));
if(mongoDatabase.getCollection("coll_test1") == null ){
mongoDatabase.createCollection("coll_test1");
}
MongoCollection<Document> coll1 = mongoDatabase.getCollection("coll_test1");
// 创建文档
Map<String, Object> map = new HashMap<>();
map.put("_id", "13");
map.put("name", "zhaoyun");
map.put("age", 18);
map.put("sex", 1);
Document document = new Document(map);
//向集合中插入文档
coll1.insertOne(document);
System.out.println(coll1.countDocuments());
//3.获取集合
MongoCollection<Document> collection = mongoDatabase.getCollection("coll_test1");
//4.查询获取文档集合
FindIterable<Document> documents = collection.find();
//5.循环遍历
for (Document doc : documents) {
System.out.println(doc);
}
//6.关闭连接
mongoClient.close();
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}
问题: 1.问题获取集合之后如何判断该集合是否存在? 用listCollectionNames 查找集合的名字,如果名字存在则说明集合存在否则集合不存在,创建集合 for (String name : db.listCollectionNames()) { System.out.println(name); if("test22222".equals(name)){ create =false; } } if(create){ db.createCollection("test22222"); System.out.println("集合创建成功"); }
2.如何给一个集合中的所有文档增加字段?
思路是:更新所有集合并设置字段。
文中使用的是增加判断条件titl为空的时候可以查找出来所有的数据,其实还可以用一个空的Document对象
package com.rain.insert;
import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.UpdateOptions;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.mongodb.client.model.Filters.gt;
import static com.mongodb.client.model.Filters.ne;
public class AddOneFild {
private final static Logger logger = LoggerFactory.getLogger(AddOneFild.class);
public static void main(String[] args) {
String uri = "mongodb://192.168.182.142:27017";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
Bson query = ne("title", ""); // 利用title不为空过滤出来所有记录
Bson updates = Updates.combine(
Updates.set("num_mflix_comments", 60), // 需要新增的字段
Updates.addToSet("genres", "Frequently Discussed"),
Updates.currentTimestamp("lastUpdated"));
UpdateOptions options = new UpdateOptions().upsert(true);
try {
UpdateResult result = collection.updateMany(query, updates, options);
logger.info("Modified document count: " + result.getModifiedCount());
} catch (MongoException me) {
logger.info("Unable to update due to an error: " + me);
}
}
}
}
其实还可以用一个空的Document对象
package com.rain.insert;
import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.UpdateOptions;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.mongodb.client.model.Filters.gt;
import static com.mongodb.client.model.Filters.ne;
/**
* 更新是传递一个空的文档对象,也就更新所有
*/
public class AddOneFild {
private final static Logger logger = LoggerFactory.getLogger(AddOneFild.class);
public static void main(String[] args) {
String uri = "mongodb://192.168.182.142:27017";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
Bson query = ne("title", ""); // 利用title不为空过滤出来所有记录
Document doc = new Document(); // 使用空的文档对象
Bson updates = Updates.combine(
Updates.set("test_add_filed", 60), // 需要新增的字段
Updates.addToSet("genres", "Frequently Discussed"),
Updates.currentTimestamp("lastUpdated"));
UpdateOptions options = new UpdateOptions().upsert(true);
try {
UpdateResult result = collection.updateMany(doc, updates, options);
logger.info("Modified document count: " + result.getModifiedCount());
} catch (MongoException me) {
logger.info("Unable to update due to an error: " + me);
}
}
}
}