1. 程式人生 > >mongodb 基礎安裝與使用

mongodb 基礎安裝與使用

解壓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" }