Mongodb使用筆記
一、安裝
- 下載地址:
https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl?_ga=2.224499034.1937345960.1533433838-1304921847.1533433838 - 解壓縮到自己想要安裝的目錄,比如d:\mongodb
- 創建文件夾d:\mongodb\db、d:\mongodb\log,分別用來安裝db和日誌文件,在log文件夾下創建一個日誌文件MongoDB.log,即d:\mongodb\log\MongoDB.log
- 運行cmd.exe進入dos命令界面,執行下列命令
> cd d:\mongodb\bin
> d:\mongodb\bin>mongod -dbpath “d:\mongodb\db” - 測試鏈接。在瀏覽器中輸入:http://localhost:27017
It looks like you are trying to access MongoDB over HTTP on the native driver port.表示啓動成功 - 當mongod.exe被關閉時,mongo.exe 就無法連接到數據庫了,因此每次想使用mongodb數據庫都要開啓mongod.exe程序,所以比較麻煩,此時我們可以將MongoDB安裝爲windows服務
cmd跳轉到mongodb下的bin目錄下輸入
mongod --logpath d:\mongodb\log\mongodb.log --logappend --dbpath d:\mongodb\db --directoryperdb --serviceName MongoDB --install
二、使用Shell
繼續輸入:
mongo
如果是連接遠程數據庫:
mongo 192.168.1.200:27017/database -u user -p password
然後使用如下5個命令進行數據庫的創建、查找
show dbs
use taskdb
db.task.insert({…})
show collections
db.task.find()
管理員:c:\windows\system32\cmd.exe - mongo
D:\mongodb\bin>mongo
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.1
Welcome to the MongoDB shell.
For interactive help, type “help”.
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2018-08-05T10:38:19.068+0800 I CONTROL [initandlisten]
2018-08-05T10:38:19.069+0800 I CONTROL [initandlisten] ** WARNING: Access contr
ol is not enabled for the database.
2018-08-05T10:38:19.070+0800 I CONTROL [initandlisten] ** Read and wri
te access to data and configuration is unrestricted.
2018-08-05T10:38:19.071+0800 I CONTROL [initandlisten]
2018-08-05T10:38:19.072+0800 I CONTROL [initandlisten] Hotfix KB2731284 or late
r update is not installed, will zero-out data files.
2018-08-05T10:38:19.073+0800 I CONTROL [initandlisten]
show dbs
admin 0.000GB
local 0.000GB
use taskdb
switched to db taskdb
db.task.insert({name:“第一個任務”,states:{name:“創建”,person:“Jim”}})
WriteResult({ “nInserted” : 1 })
show dbs
admin 0.000GB
local 0.000GB
taskdb 0.000GB
show collections
task
db.task.find()
{ “_id” : ObjectId(“5b66677231e557b59154c59f”), “name” : “第一個任務”, “states”
: { “name” : “創建”, “person” : “Jim” } }
三、java連接Mongodb
1、Maven添加依賴
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.4.1</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>3.4.1</version>
</dependency>
</dependencies>
2、連接數據庫的Java代碼如
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
public class MongoDBJDBC{
public static void main( String args[] ){
try{
// 連接到 mongodb 服務
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 連接到數據庫
MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");
System.out.println("Connect to database successfully");
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}
3、如果你的 Mongo 需要驗證用戶名及密碼,可以使用以下代碼:
package com.iwhere.rongyun.config;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
@Configuration
public class MongoConfig {
private static Logger LOGGER = LoggerFactory.getLogger(MongoConfig.class);
@Value("${mongodb.hostports}")
private String hostports;
@Value("${mongodb.maxConnect}")
private String maxConnect;
@Value("${mongodb.maxWaitThread}")
private String maxWaitThread;
@Value("${mongodb.maxTimeOut}")
private String maxTimeOut;
@Value("${mongodb.maxWaitTime}")
private String maxWaitTime;
@Value("${mongodb.username}")
private String username;
@Value("${mongodb.password}")
private String password;
@Value("${mongodb.database}")
private String database;
@Value("${mongodb.collection")
private String collection;
@Bean
public MongoClient mongoClient() {
MongoClient mongoClient = null;
MongoClientOptions.Builder build = new MongoClientOptions.Builder();
build.connectionsPerHost(Integer.valueOf(maxConnect));
build.threadsAllowedToBlockForConnectionMultiplier(Integer.valueOf(maxWaitThread));
build.connectTimeout(Integer.valueOf(maxTimeOut) * 1000);
build.maxWaitTime(Integer.valueOf(maxWaitTime) * 1000);
MongoClientOptions options = build.build();
try {
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
for (String hostport : hostports.split(", *")) {
if (StringUtils.isBlank(hostport)) {
continue;
}
hostport = hostport.trim();
ServerAddress serverAddress = new ServerAddress(hostport.split(":")[0],Integer.valueOf(hostport.split(":")[1]));
addrs.add(serverAddress);
}
MongoCredential credential = MongoCredential.createScramSha1Credential(username, database, password.toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential);
mongoClient = new MongoClient(addrs,credentials, options);
LOGGER.info("【mongodb client】: mongodb客戶端創建成功");
} catch (Exception e) {
LOGGER.error("【mongodb client】: mongodb客戶端創建成功");
e.printStackTrace();
}
return mongoClient;
}
@Bean
public MongoDatabase mongoDatabase(MongoClient mongoClient) {
MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
return mongoDatabase;
}
@Bean
public MongoCollection<Document> mongoCollection(MongoDatabase mongoDatabase) {
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection(collection);
return mongoCollection;
}
}
通過spring配置文件注入所需的值即可, mondb.properties爲:
mongodb.hostports=192.168.51.100:2,192.168.51.101:533,192.168.51.102:21
mongodb.maxConnect=50
mongodb.maxWaitThread=50
mongodb.maxTimeOut=60
mongodb.maxWaitTime=60
mongodb.username=name
mongodb.password=pass
mongodb.database=data
mongodb.collection=user_rongyun
4、創建集合、選擇集合、插入文檔、檢索所有文檔、更新結果、檢索結果
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class MongoDBJDBC{
public static void main( String args[] ){
try{
// 連接到 mongodb 服務
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 連接到數據庫
MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");
System.out.println("Connect to database successfully");
mongoDatabase.createCollection("test");
System.out.println("集合創建成功");
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
System.out.println("集合 test 選擇成功");
//插入文檔
/**
* 1. 創建文檔 org.bson.Document 參數爲key-value的格式
* 2. 創建文檔集合List<Document>
* 3. 將文檔集合插入數據庫集合中 mongoCollection.insertMany(List<Document>) 插入單個文檔可以用 mongoCollection.insertOne(Document)
* */
Document document = new Document("title", "MongoDB").
append("description", "database").
append("likes", 100).
append("by", "Fly");
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
System.out.println("文檔插入成功");
//檢索所有文檔
/**
* 1. 獲取迭代器FindIterable<Document>
* 2. 獲取遊標MongoCursor<Document>
* 3. 通過遊標遍歷檢索出的文檔集合
* */
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
//更新文檔 將文檔中likes=100的文檔修改爲likes=200
collection.updateMany(Filters.eq("likes", 100)
, new Document("$set",new Document("likes",200)));
//檢索查看結果
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}