mongodb 基礎安裝與使用
阿新 • • 發佈:2018-12-10
解壓mongodb
[[email protected] opt]# ls
hazelcast-3.10.2.tar.gz jdk-8u171-linux-x64.tar.gz logstash-6.4.0.tar.gz nginx-1.15.1.tar.gz pcre-8.40.tar.gz zlib-1.2.11 zookeeper-3.4.10.tar.gz
hazelcast-management-center-3.10.1.tar.gz kafka_2.11-1.1.0.tgz mongodb-linux-x86_64-3.2.12.tgz pcre-8.40 redis-4.0.10.tar.gz zlib-1.2.11.tar.gz
[ [email protected] opt]# tar zxvf mongodb-linux-x86_64-3.2.12.tgz
將mongodb 移動到你想安裝的目錄
[[email protected] opt]# mv mongodb-linux-x86_64-3.2.12 /usr/local/mongodb
在mongodb目錄下建立日誌、資料等存放資料夾
[[email protected] mongodb]# cd /usr/local/mongodb/
[[email protected] mongodb]# mkdir data/db
[[email protected] mongodb]# mkdir logs
[[email protected] mongodb]# ls
bin data GNU-AGPL-3.0 logs MPL-2 README THIRD-PARTY-NOTICES
建立配置檔案
[[email protected] mongodb]# cd bin/
[[email protected] bin]# vim mongodb.yml
mongodb.yml
#日誌檔案存放地址配置 systemLog: destination: file path: "/usr/local/mongodb/logs/mongodb.log" logAppend: true #資料存放地址配置 storage: dbPath: "/usr/local/mongodb/data/db" journal: enabled: true #守護程序執行 processManagement: fork: true #ip埠繫結 net: bindIp: 192.168.126.130 port: 27017
需要注意的是 請給data\db logs等資料夾相關許可權否則啟動會報錯。
啟動mongodb
[[email protected] mongodb]# cd bin/
[[email protected] bin]# vim mongodb.yml
[[email protected] bin]# ls
bsondump mongo mongod mongodb.yml mongodump mongoexport mongofiles mongoimport mongooplog mongoperf mongorestore mongos mongostat mongotop
[[email protected] bin]# ./mongod --config mongodb.yml
通過客戶端直接操作mongo
[[email protected] bin]# ls
bsondump mongo mongod mongodb.yml mongodump mongoexport mongofiles mongoimport mongooplog mongoperf mongorestore mongos mongostat mongotop
[[email protected] bin]# ./mongo 192.168.126.130:27017/test
MongoDB shell version: 3.2.12
connecting to: 192.168.126.130:27017/test
Server has startup warnings:
2018-09-18T10:09:47.370+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-09-18T10:09:47.370+0800 I CONTROL [initandlisten]
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten]
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten]
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten]
>
具體的客戶端操作命令 請參考其他筒子的部落格吧!本文不在詳解
下面就是Java程式碼了,專案使用的是springboot
maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
配置檔案
server:
port: 8050
session:
timeout: 10
spring:
data:
mongodb:
uri: mongodb://192.168.126.130:27017/myTest
建立實體對映類
package com.cloud.mongodb.po;
/**
* @author zane
*
*/
public class UserPo {
private Long userId;
private String userName;
private String userNickName;
private Integer userAge;
private Integer userSex;
private String email;
private String phone;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserNickName() {
return userNickName;
}
public void setUserNickName(String userNickName) {
this.userNickName = userNickName;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
public Integer getUserSex() {
return userSex;
}
public void setUserSex(Integer userSex) {
this.userSex = userSex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public UserPo(Long userId, String userName, String userNickName, Integer userAge, Integer userSex, String email,
String phone) {
super();
this.userId = userId;
this.userName = userName;
this.userNickName = userNickName;
this.userAge = userAge;
this.userSex = userSex;
this.email = email;
this.phone = phone;
}
public UserPo() {
super();
}
@Override
public String toString() {
return new StringBuffer("userId:").append(this.userId).append(" userName:").append(this.userName)
.append(" userNickName:").append(this.userNickName).append(" userAge:").append(this.userAge)
.append(" userSex:").append(this.userSex).append(" email:").append(this.email).append(" phone:")
.append(this.phone).toString();
}
}
建立mongo資料操作類、介面 這裡有兩種實現方式 使用MongoRepository 和MongoTemplate
繼承MongoRepository:
@Component
public interface UserRepository extends MongoRepository<UserPo, Long> {
/*
* MongoRepository與HibernateTemplete相似,提供一些基本的方法,
* 實現的方法有findone(),save(),count(),findAll(),findAll(Pageable),delete(),deleteAll
* ()..etc 要使用Repository的功能,先繼承MongoRepository<T, TD>介面
* 其中T為倉庫儲存的bean類,TD為該bean的唯一標識的型別,一般為ObjectId。
* 之後在spring-boot中注入該介面就可以使用,無需實現裡面的方法,spring會根據定義的規則自動生成。 starter-data-mongodb
* 支援方法命名約定查詢 findBy{User的name屬性名}, findBy後面的屬性名一定要在User類中存在,否則會報錯
*/
/**
* 通過手機號查詢
*
* @param phone
* @return
*/
public List<UserPo> findByPhone(String phone);
}
使用MongoTemplate
package com.cloud.mongodb.mongo.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
import com.cloud.mongodb.po.UserPo;
@Component
public class UserDao {
@Autowired
private MongoTemplate mongoTemplate;
public void save(UserPo user) {
mongoTemplate.save(user);
}
}
兩種方式的優缺點:
MongoRepository:
它其實就是繼承Repository 的子介面 ,Repository 是 Spring Data 的一個核心介面。使用它可以使你不用寫相關的查詢組合語句,它會內部為我們實現這樣的一個類。只要你按規定定義好介面名就可以免去你寫查詢組合語句。相關詳細介紹的部落格地址:https://blog.csdn.net/qinsihang/article/details/19921981
MongoTemplate:
MongoTemplate是資料庫和程式碼之間的介面,它有兩個核心的類:Criteria類:封裝所有的語句,以方法的形式查詢、Query類:將語句進行封裝或者新增排序之類的操作。
MongoRepository的缺點是不夠靈活,MongoTemplate 正好可以彌補
執行測試:
package com.cloud.mongodb;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.cloud.mongodb.mongo.dao.UserDao;
import com.cloud.mongodb.mongo.repository.UserRepository;
import com.cloud.mongodb.po.UserPo;
@SpringBootTest
@RunWith(SpringRunner.class)
public class AppTest {
@Autowired
private UserDao dao;
@Autowired
private UserRepository repository;
@Test
public void test1() {
UserPo user = new UserPo();
user.setUserId(2L);
user.setUserName("張三");
user.setUserNickName("老張");
user.setUserAge(33);
user.setPhone("13323333233");
user.setUserSex(1);
user.setEmail("[email protected]");
dao.save(user);
}
@Test
public void test2() {
List<UserPo> list = repository.findByPhone("13323333233");
if (null != list && !list.isEmpty()) {
for (UserPo userPo : list) {
System.out.println(userPo.toString());
}
}
}
}
執行結果
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.4.RELEASE)
2018-09-18 11:26:00.925 INFO 10704 --- [ main] com.cloud.mongodb.AppTest : Starting AppTest on DESKTOP-R7GPPNQ with PID 10704 (started by zane in E:\workSpace\learn-project\cloud-mongodb)
2018-09-18 11:26:00.925 INFO 10704 --- [ main] com.cloud.mongodb.AppTest : No active profile set, falling back to default profiles: default
2018-09-18 11:26:00.957 INFO 10704 --- [ main] o.s.w.c.s.GenericWebApplicationContext : Refreshing org.s[email protected]56cdfb3b: startup date [Tue Sep 18 11:26:00 CST 2018]; root of context hierarchy
2018-09-18 11:26:02.903 INFO 10704 --- [ main] org.mongodb.driver.cluster : Cluster created with settings {hosts=[192.168.126.130:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2018-09-18 11:26:02.980 INFO 10704 --- [8.126.130:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:1, serverValue:6}] to 192.168.126.130:27017
2018-09-18 11:26:02.981 INFO 10704 --- [8.126.130:27017] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=192.168.126.130:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 12]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=652533}
2018-09-18 11:26:03.615 INFO 10704 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.s[email protected]56cdfb3b: startup date [Tue Sep 18 11:26:00 CST 2018]; root of context hierarchy
2018-09-18 11:26:03.674 INFO 10704 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-09-18 11:26:03.676 INFO 10704 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-09-18 11:26:03.701 INFO 10704 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-09-18 11:26:03.701 INFO 10704 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-09-18 11:26:03.730 INFO 10704 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-09-18 11:26:03.871 INFO 10704 --- [ main] com.cloud.mongodb.AppTest : Started AppTest in 3.242 seconds (JVM running for 3.787)
2018-09-18 11:26:03.950 INFO 10704 --- [ main] org.mongodb.driver.connection : Opened connection [connectionId{localValue:2, serverValue:7}] to 192.168.126.130:27017
userId:2 userName:張三 userNickName:老張 userAge:33 userSex:1 email:[email protected] phone:15555555225
2018-09-18 11:26:04.035 INFO 10704 --- [ Thread-2] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationCo[email protected]: startup date [Tue Sep 18 11:26:00 CST 2018]; root of context hierarchy
2018-09-18 11:26:04.039 INFO 10704 --- [ Thread-2] org.mongodb.driver.connection : Closed connection [connectionId{localValue:2, serverValue:7}] to 192.168.126.130:27017 because the pool has been closed.
客戶端查詢:
[[email protected] bin]# ./mongo 192.168.126.130:27017/test
MongoDB shell version: 3.2.12
connecting to: 192.168.126.130:27017/test
Server has startup warnings:
2018-09-18T10:09:47.370+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-09-18T10:09:47.370+0800 I CONTROL [initandlisten]
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten]
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten]
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-09-18T10:09:47.371+0800 I CONTROL [initandlisten]
> show dbs
local 0.000GB
myTest 0.000GB
> use myTest
switched to db myTest
> db.userPo.find({phone:'15555555225'})
{ "_id" : ObjectId("5ba0704b12a2a229d031e8cd"), "_class" : "com.cloud.mongodb.po.UserPo", "userId" : NumberLong(2), "userName" : "張三", "userNickName" : "老張", "userAge" : 33, "userSex" : 1, "email" : "[email protected]", "phone" : "15555555225" }