#mongodb

Installation

installation on ubuntu

먼저 다음과 같이 mongodb가 설치되어 있는지 확인한다.
mongod는 서버, mongo는 클라이언트 이다.

1
2
mongod --version
mongo --version

만약 설치가 되어있지 않다면 다음 명령어로 설치를 진행한다.

1
2
3
4
5
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
sudo apt-get update

sudo apt-get install -y mongodb-org

설치가 완료되었다면 아래의 명령어로 서비스를 실행시킨다.

1
sudo service mongod start

서비스가 정상적으로 실행되었는지 확인하기 위해 다음과 같은 명령어를 사용한다.

1
sudo service mongodb status

이제 다음 명령어로 mongodb에 접속한다.

1
mongo

접속이 완료되었다면 database를 관리하기 위한 계정을 만들어야 한다.
이 계정을 통해 외부 컴퓨터에서도 본 database에 접근할 수 있게 된다.
다음과 같은 admin database에 접근하여 root user를 생성한다.

1
2
use admin
db.createUser({user: "root", pwd: "mypassword", roles: [{ role: "root", db: "admin" }] });

유저를 생성하였다면 다음 명령어로 설정파일을 열어 authorization을 enabled로 해준다.

1
cd /etc/mongod.conf

설정이 완료되었다면 mongodb를 다시 실행시킨다.

1
sudo service mongod restart

다시 시작한 뒤에는 사용할 계정을 만들어 준다.

1
2
3
4
5
use app    #app 대신에 내가 만들 db명을 선택
db.createUser(
{ user: "app",
pwd: "mypassword",
roles: ['readWrite','userAdmin'] } )

생성한 아이디로 로그인 해본다.

1
mongo -uapp -pmypassword app

connect to mongodb

1
mongo --port <포트> -u "<사용자 계정>" -p "<비밀번호>" --authenticationDatabase "admin"

Configuration

보안설정 바꾸기
Vim /etc/mongod.conf

https://velopert.com/457

Authoriztion 사용하기
http://www.tutorialbook.co.kr/entry/MongoDB-%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9D%B8%EC%A6%9D-authorization-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

Basic Concepts

Collection

create collection

1
db.createCollection(name, [options])

delete collection

1
db.COLLECTION_NAME.drop()

Schema

일종의 데이터의 양식이다.
이 스키마를 기반으로 모델을 생성한다.

Model

일종의 커넥션으로 다른 것들은 이 모델 객체에서 바로 수행한다.
여기서 새로운 데이터를 저장하는 save를 하기 위해서는 instance를 생성하여야 하고,
다른 경우는 이 모델에서 바로 수행한다.

Query

update

example

1
db.getCollection('schedule').update({"email":"test"}, {$set:{"email":"test@test.com"}}, {muti:true});
위 예제는 query를 만족하는 여러가지 데이터를 한번에 바꾸는 명령이다. 두번째 인자는 update 할 object 부분인데, {$set:{}} 을 넣어 특정 키값을 변경하고 있다. 만약 이렇게 $set 을 사용하지 않으면 해당 데이터가 통으로 교체되어 버린다.

Transaction

서버버전 4 이상에서 제공한다.

featurecompatibility를 “4.0” 으로 해야한다.

commitTransaction()은 sessionEnd 까지 포함된 개념이다.

Uninstallation

1
2
3
4
sudo service mongod stop
sudo apt-get purge mongodb-org*
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

Cookbook

위치 찾기

1
db.collection.createIndex( { <location field> : "2dsphere" } )

세팅하기

  1. mongoose 설치
    npm install mongoose
  2. mongoose 임포트 해주기
    var mongoose = require('mongoose');
  3. 몽구를 이용하여 db 연결
    mongoose.connect('mongodb://username:password@host:port/database?options...');
    mongoose를 활용한 nodeje mongodb 연결

ObjectId 이용하기

1
mongoose.Types.ObjectId(req.params._id)

Model을 사용하여 update 하기

1
2
3
4
5
6
7
8
Apply.update({_id:saved_id},req.body,{upsert:true},function(err,docs){
if(err){
console.log(err);
res.sendStatus(500);
}else{
res.sendStatus(200);
}
})

$inc 를 활용하여 increase 하기

undefined

없으면 create하고 있으면 update하기

1
2
3
4
5
6
7
8
9
10
11
12
13
router.put('/',function(req,res){
console.log("스케줄 업데이트 처리 req.body:", req.body);
delete req.body._id;

Schedule.findOneAndUpdate({day:req.body.day, time:req.body.time},req.body,{upsert:true},function(err,docs){
if(err){
console.log(err);
res.sendStatus(500);
}else{
res.sendStatus(200);
}
})
})

upsert: true 항목을 추가한다.

$or를 활용하여 or 서치하기

1
2
3
4
5
6
7
8
9
10
ar userExists = function(u, callback) {
User.find({$or:[ {'username': u.username}, {'email': u.email}]} , function(err,user) {
if (err || user.length > 0) { // user does not come back null, so check length
callback(1);
return;
}
//no error, no user
callback(0);
});
};

NPM mongoose package Document

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×