1. mongoDB 설치
2. 몽고DB php모듈 설치(php_mongodb.dll)
- 현재 사용하는 php 버전과 thread safe 사용 여부를 파악( phpinfo() 함수를 이용하여 확인 할 수 있다.)
- thread safe : 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다.
보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도
각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.
3. https://pecl.php.net/package/mongodb/1.5.2/windows 경로로 가서 본인에게 맞는 php_mongodb.dll 파일을 다운로드
- > 해당 파일을 php가 설치된 파일로 복사 (위 그림 configuration file 의 php경로에 ext폴더에 복사 )
-> php.ini 파일에 extension=mongodb 추가
4. composer.json에 jenssegers/mongodb 패키지 설치(3.3.0 버전이 laravel 5.5 버전과 호환
- d:\project> composer require jessegers/mongdb:³.3.0-alpha
5. .env 및 database.php 설정
.env
MONGO_DB_HOST = "127.0.0.1"
MONGO_DB_PORT = 27017
MONGO_DB_DATABASE = "test"
MONGO_DB_USERNAME =
MONGO_DB_PASSWORD =
database.php
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGO_DB_HOST', 'localhost'),
'port' => env('MONGO_DB_PORT', 27017),
'database' => env('MONGO_DB_DATABASE'),
'username' => env('MONGO_DB_USERNAME'),
'password' => env('MONGO_DB_PASSWORD'),
'options' => []
],
6. provider 에 서비스 등록 (config폴더->app.php)
Jenssegers\Mongodb\MongodbServiceProvider::class,
7. 간단한 sample페이지 작성
7.1 간단한 insert 후 select
// controller method
public function getMongo()
{
//insert
DB::connection("mongodb")
->collection("location")
->insert([
[
'name' => 'seoul',
'num' => "02",
"sigu" =>[
"name"=>["중랑구","동대문구","구로구","강남구","중구"]
]
],
[
'name' => 'gyeonggi',
'num' => "031",
"sigu" =>[
"name"=>["시흥시","성남시","남양주시","양주군","의정부시"]
]
],
[
'name' => 'busan',
'num' => "051",
"sigu"=>[
"name"=> ["동구","서구","남구","북구","중구"]
]
],
]);
//select
dd(
DB::connection("mongodb")
->collection("location")
->where("name","seoul")
->select("num")
->get(),
DB::connection("mongodb")
->collection("location")
->where("name","busan")
->select("sigu.name")
->get()
);
}
//result
Collection {#570 ▼
#items: array:1 [▼
0 => array:2 [▼
"_id" => ObjectId {#569 ▶}
"num" => "02"
]
]
}
Collection {#582 ▼
#items: array:1 [▼
0 => array:2 [▼
"_id" => ObjectId {#581 ▶}
"sigu" => array:1 [▼
"name" => array:5 [▼
0 => "동구"
1 => "서구"
2 => "남구"
3 => "북구"
4 => "중구"
]
]
]
]
7.2 update
//update
DB::connection("mongodb")
->collection("location")
->where("name","seoul")
->update([
'num' => "002",
"namelength" => 5
]);
//select
dd(
DB::connection("mongodb")
->collection("location")
->where("name","seoul")
->select("*")
->get()
);
//result
Collection {#581 ▼
#items: array:1 [▼
0 => array:5 [▼
"_id" => ObjectId {#580 ▶}
"name" => "seoul"
"num" => "002"
"sigu" => array:1 [▶]
"namelength" => 5
]
]
}
7.3 delete
//delete
DB::connection("mongodb")
->collection("location")
->where("name","seoul")
->delete();
//select
dd(
DB::connection("mongodb")
->collection("location")
->where("name","seoul")
->select("*")
->get()
);
//result
Collection {#580 ▼
#items: []
}
- 쿼리빌더를 이용한 결과값은 컬렉션 객체(Illuminate\Database\Eloquent\Collection)의 인스턴스로 반환,
다양한 컬렉션 객체 메소드를 이용할 수 있다.(https://laravel.kr/docs/5.5/eloquent-collections) - 쿼리빌더가 아닌 엘리퀀츠 orm을 이용하여 curd등을 작성 할 수 있다.
- https://github.com/jenssegers/laravel-mongodb
- https://appdividend.com/2018/05/10/laravel-mongodb-crud-tutorial-with-example/
참고
- thread safe : https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_%EC%95%88%EC%A0%84
- mongodb laravel github : https://github.com/jenssegers/laravel-mongodb
- mongodb laravel tutorial : https://appdividend.com/2018/05/10/laravel-mongodb-crud-tutorial-with-example/