1.下载安装
下载地址:https://www.mongodb.com/download-center#community
在这我用的是Linux 64-bit legacy x64
安装
切换到下载的目录
tar -zxvf mongodb-linux-x86_64-3.4.1.tgz 解压
mv mongodb-linux-x86_64-3.4.1 /usr/local/mongodb 移动到指定目录
cd /usr/local/mongodb 切换目录
mkdir -p /db 创建目录
mkdir -p /log
cd bin/
./mongod --dbpath /usr/local/mongodb/db/ 指定数据库路径(--dbpath)启动
新开端口测试
cd /usr/local/mongodb/bin 切换目录
./mongo 默认连接到test库,可指定连接,格式:./mongo [user] [pwd] [ip]:[port]/[dbname]
2.创建用户并授权(MongoDB默认无需用户即可操作数据库)
启动数据库后
use admin
db.createUser({user:”root”,pwd:”rootp”,roles:[{role:”root”,db:”admin”}]})
db.auth(“root”,”rootp”)
角色说明(只列出部分):
关闭数据库,重新启动,这次是认证方式启动
./mongod --dbpath /usr/local/mongodb/db/ --auth
客户端再次连接
./mongo
进行命令操作,如:
show dbs
会提示无权限操作
所以,连接方式也是要认证
./mongo -uroot -prootp ip:port/admin
ip就是MongoDB服务器IP地址,port默认是27017
admin是指定要连接的数据库名
再试操作命令,即可正常显示
可查看用户和删除用户
db 查看当前使用的数据库
use admin
db.system.users.find() 查询所有用户
db.system.user.remove({user:”xxx”}) 删除用户xxx
3.Java操作MongoDB
引用jar包
package com.mongo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.UpdateResult;
public class MongoDb {
private static MongoCollection<Document> collection;
/**
* 链接数据库
* @param databaseName 数据库名称
* @param collectionName 集合名称
* @param hostName 主机名
* @param port 端口号
*/
public static void connect(String databaseName, String collectionName, String hostName, int port) {
@SuppressWarnings("resource")
MongoClient client = new MongoClient(hostName, port);
MongoDatabase db = client.getDatabase(databaseName);
collection = db.getCollection(collectionName);
}
public static void connect(String databaseName, String collectionName, String hostName, int port,
String username, String password) {
MongoCredential credential = MongoCredential.createScramSha1Credential(username, databaseName, password.toCharArray());
@SuppressWarnings("resource")
MongoClient client = new MongoClient(new ServerAddress(hostName, port), Arrays.asList(credential));
MongoDatabase db = client.getDatabase(databaseName);
collection = db.getCollection(collectionName);
}
/**
* 插入一个文档
* @param document 文档
*/
public static void insert(Document document) {
collection.insertOne(document);
}
/**
* 查询所有文档
* @return 所有文档集合
*/
public static List<Document> findAll() {
List<Document> results = new ArrayList<Document>();
FindIterable<Document> iterables = collection.find();
MongoCursor<Document> cursor = iterables.iterator();
while (cursor.hasNext()) {
results.add(cursor.next());
}
return results;
}
/**
* 根据条件查询
* @param filter 查询条件 //注意Bson的几个实现类,BasicDBObject, BsonDocument,
* BsonDocumentWrapper, CommandResult, Document, RawBsonDocument
* @return 返回集合列表
*/
public static List<Document> findBy(Bson filter) {
List<Document> results = new ArrayList<Document>();
FindIterable<Document> iterables = collection.find(filter);
MongoCursor<Document> cursor = iterables.iterator();
while (cursor.hasNext()) {
results.add(cursor.next());
}
return results;
}
/**
* 更新查询到的第一个
* @param filter 查询条件
* @param update 更新文档
* @return 更新结果
*/
public static UpdateResult updateOne(Bson filter, Bson update) {
UpdateResult result = collection.updateOne(filter, update);
return result;
}
/**
* 更新查询到的所有的文档
* @param filter 查询条件
* @param update 更新文档
* @return 更新结果
*/
public static UpdateResult updateMany(Bson filter, Bson update) {
UpdateResult result = collection.updateMany(filter, update);
return result;
}
/**
* 更新一个文档, 结果是replacement是新文档,老文档完全被替换
* @param filter 查询条件
* @param replacement 跟新文档
*/
public static void replace(Bson filter, Document replacement) {
collection.replaceOne(filter, replacement);
}
/**
* 根据条件删除一个文档
* @param filter 查询条件
*/
public static void deleteOne(Bson filter) {
collection.deleteOne(filter);
}
/**
* 根据条件删除多个文档
* @param filter 查询条件
*/
public static void deleteMany(Bson filter) {
collection.deleteMany(filter);
}
}
测试
package com.test;
import java.util.List;
import org.bson.Document;
import org.junit.BeforeClass;
import org.junit.Test;
import com.mongo.MongoDb;
import com.mongodb.client.result.UpdateResult;
public class TestMongo {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
MongoDb.connect("test", "ht", "xxx", 27017, "testu", "testp");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testInsert() {
Document document = new Document();
document.append("name", "test").append("age", 20).append("cell", "167575");
MongoDb.insert(document);
}
@Test
public void testFindAll() {
List<Document> results = MongoDb.findAll();
for(Document doc : results){
System.out.println(doc.toJson());
}
}
@Test
public void testFindBy() {
Document filter = new Document();
filter.append("name", "张三");
List<Document> results = MongoDb.findBy(filter);
for (Document doc : results) {
System.out.println(doc.toJson());
}
}
@Test
public void testUpdateOne() {
Document filter = new Document();
filter.append("age", 21);
//注意update文档里要包含"$set"字段
Document update = new Document();
update.append("$set", new Document("name", "李四"));
UpdateResult result = MongoDb.updateOne(filter, update);
System.out.println("matched count = " + result.getMatchedCount());
}
@Test
public void testUpdateMany() {
Document filter = new Document();
filter.append("age", 20);
Document update = new Document();
update.append("$set", new Document("age", 21));
UpdateResult result = MongoDb.updateMany(filter, update);
System.out.println("matched count = " + result.getMatchedCount());
}
@Test
public void testReplace() {
Document filter = new Document();
filter.append("cell", "15803948943");
//注意:更新文档时,不需要使用"$set"
Document replacement = new Document();
replacement.append("name", "李四");
replacement.append("age", 21);
replacement.append("cell", "15803948943");
MongoDb.replace(filter, replacement);
}
@Test
public void testDeleteOne() {
Document filter = new Document();
filter.append("cell", "15803948943");
MongoDb.deleteOne(filter);
}
@Test
public void testDeleteMany() {
Document filter = new Document();
filter.append("age", 21);
MongoDb.deleteMany(filter);
}
}
补充:
添加MongoDB服务
cd /usr/local/mongodb
touch mongod.conf 创建文件
添加如下内容:
dbpath=/usr/local/mongodb/db
logpath=/usr/local/mongodb/logs/mongodb.log
logappend=true
fork=true
auth=true
保存
启动命令参数说明:
cd /etc/rc.d/init.d
touch mongo 创建文件
添加如下内容:
#!/bin/bash #chkconfig: 2345 80 90 #description: mongodb start() { /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod.conf } stop() { /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod.conf --shutdown } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac
保存
chmod +x mongo 给该文件添加可执行权限
将命令添加到PATH中
vim /etc/profile
在文件最后添加如下内容:
export PATH=”$PATH:/usr/local/mongodb/bin”
保存
source profile 立即生效
添加服务
chkconfig -add mongo
chkconfig mongo on
service mongo start 启动服务
service mongo stop 关闭服务
因为添加到PATH,所以可在任何目录下直接用客户端连接:
mongo -uroot -prootp ip:port/admin