처음 mongodb
13698 단어 MongoDB
시작
docker로 mongodb와 데이터 뷰어의 mongo-express 2개를 기동시킵니다.
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
htps : // 후 b. 도 c r. 코 m/_/몬고
시작
docker-compose up -d
mongodb와 mongo express의 두 컨테이너가 시작됩니다.
# docker ps | grep mongo
b8f3154dda29 mongo-express "tini -- /docker-ent…" 34 minutes ago Up 33 minutes 0.0.0.0:8082->8081/tcp mongo_mongo-express_1
06e8e28840bb mongo "docker-entrypoint.s…" 35 minutes ago Up 33 minutes 27017/tcp mongo_mongo_1
mongo-express
mongo-express는 이런 URL에서 볼 수 있습니다.
http://localhost:8081/
이런 식으로 문서를 브라우저에서 열람 가능합니다 (데이터는 이 기사의 ↓쪽으로 insert한 것입니다)
csv에 내보내는 편리한 것처럼.
데이터 변경도 가능합니다! 멋지다.
CLI 연결
# コンテナに入る
docker exec -it mongo_mongo_1 bash
# cli起動
root@06e8e28840bb:/# mongo -u root -p example
...
...
...
>
연결할 수 있었습니다. username/password는 MONGO_INITDB_ROOT_USERNAME/PASSWORD 로 설정한 것입니다.
사용해보기
신기사를 따라, 소중한 곳을 뽑아 봅니다.
MongoDB 초입문
htps : // 이 m / 고등어 1024 / ms / f2 아 d56f2 아 3 바 7 아 f8521
놀랍게도 database를 만드는 것은 매우 간단합니다.
> use study
create가 아닌가! use만으로 만들어진다. 멋지다! !
데이터를 넣으면서 선택해 보겠습니다.
> db.stats()
# records 登録
db.user.insert({name:'mr.a', age:10, gender:'m', hobbies:['programming']});
db.user.insert({name:'mr.b', age:20, gender:'m', hobbies:['vi']});
db.user.insert({name:'ms.c', age:30, gender:'f', hobbies:['programming', 'vi']});
db.user.insert({name:'ms.d', age:40, gender:'f', hobbies:['cooking']});
# select * from study
> db.user.find()
# where句
db.user.find( {name:'ms.c'} )
配列(not dict) は文字列のように検索できる
> db.user.find({hobbies:'programming'})
{ "_id" : ObjectId("5ee1a837b84ea8cc6e82073f"), "name" : "ms.c", "age" : 30, "gender" : "f", "hobbies" : [ "programming", "vi" ] }
update 문
MongoDB의 update는 두 번째 인수로 전달한 내용으로 덮어쓰기합니다.
이거는 함정입니다. 매우 위험한 함정입니다.
これが
{ "name" : "mr.a", "age" : 10, "gender" : "m", "hobbies" : [ "programming" ] }
updateすると
db.user.update({name:'mr.a'}, {gender:'X'})
こうなっちゃう
{ "gender" : "X" }
NoSQL 있다.
실은 이것, mr.a씨의 성별을 갱신했다고 하는 것보다, 이름이 mr.a라고 하는 문서를 gender:X라고 하는 문서로 덮어썼다고 하는 것이 됩니다.
덮어쓰기보다는 대체한 느낌.
그럼 어떻게 하는 거야. . . 라고 하는 이야기입니다만, 그 때문에, $set 라고 하는 수식자를 이용할 필요가 있습니다.
본래는, $set를 사용해 이하와 같이 할 필요가 있었던 것입니다.
> db.user.update({name:'mr.a'}, {$set:{gender:'X'}})
elasticsearch보다 간단할지도. NoSQL계는 모두 이런 것일까. update 귀찮고 싫어 버린다.
그리고 이 update에도 함정이 있다.
이것이라면 MongoDB가 처음 찾은 하나만 업데이트됩니다.
동시에 2건 이상의 해당 레코드를 단번에 갱신하려면, 제4 인수에 true를 건네주어야 합니다.
> db.user.update({}, {$set:{gender:'X'}}, false, true)
처음 보기 죽이는거야・・・
upsert
upsert구는 존재하지 않고, update의 제3 인수를 true라고 하는 유감스러운 사양인것 같다. 어느 정도 좋지만
> db.counter.update( {type:'error'} ,{$inc:{count:1}}, true)
컬럼 추가
오늘 알고 싶었던 것은 여기. elasticsearch처럼 라쿠에 컬럼 추가할 수 있을까 라고. 결론 : elasticsearch보다 더 쉽게!
상당히 중요한 점이라고 생각합니다만, MongoDB에서는, RDBMS와 달리 간단하게 필드(컬럼, 열)의 추가를 할 수 있습니다.
이것은 컬렉션(테이블) 자체에 필드 정보가 정의되어 있는 것은 아니고, 어디까지나 문서(레코드, 행) 단위에 필드 정보가 보관 유지되고 있기 때문입니다.
응? ?
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
마술! ! ! ! 원래 컬럼이라는 생각이 없는 것인가. 모든 레코드 독립적입니까? 굉장해! ! ! ! !
공부가 되었습니다! ! 사용해 보자!
Reference
이 문제에 관하여(처음 mongodb), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uturned0/items/f1d8fa1d38c0aa9c8cce
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
docker-compose up -d
# docker ps | grep mongo
b8f3154dda29 mongo-express "tini -- /docker-ent…" 34 minutes ago Up 33 minutes 0.0.0.0:8082->8081/tcp mongo_mongo-express_1
06e8e28840bb mongo "docker-entrypoint.s…" 35 minutes ago Up 33 minutes 27017/tcp mongo_mongo_1
mongo-express는 이런 URL에서 볼 수 있습니다.
http://localhost:8081/
이런 식으로 문서를 브라우저에서 열람 가능합니다 (데이터는 이 기사의 ↓쪽으로 insert한 것입니다)
csv에 내보내는 편리한 것처럼.
데이터 변경도 가능합니다! 멋지다.
CLI 연결
# コンテナに入る
docker exec -it mongo_mongo_1 bash
# cli起動
root@06e8e28840bb:/# mongo -u root -p example
...
...
...
>
연결할 수 있었습니다. username/password는 MONGO_INITDB_ROOT_USERNAME/PASSWORD 로 설정한 것입니다.
사용해보기
신기사를 따라, 소중한 곳을 뽑아 봅니다.
MongoDB 초입문
htps : // 이 m / 고등어 1024 / ms / f2 아 d56f2 아 3 바 7 아 f8521
놀랍게도 database를 만드는 것은 매우 간단합니다.
> use study
create가 아닌가! use만으로 만들어진다. 멋지다! !
데이터를 넣으면서 선택해 보겠습니다.
> db.stats()
# records 登録
db.user.insert({name:'mr.a', age:10, gender:'m', hobbies:['programming']});
db.user.insert({name:'mr.b', age:20, gender:'m', hobbies:['vi']});
db.user.insert({name:'ms.c', age:30, gender:'f', hobbies:['programming', 'vi']});
db.user.insert({name:'ms.d', age:40, gender:'f', hobbies:['cooking']});
# select * from study
> db.user.find()
# where句
db.user.find( {name:'ms.c'} )
配列(not dict) は文字列のように検索できる
> db.user.find({hobbies:'programming'})
{ "_id" : ObjectId("5ee1a837b84ea8cc6e82073f"), "name" : "ms.c", "age" : 30, "gender" : "f", "hobbies" : [ "programming", "vi" ] }
update 문
MongoDB의 update는 두 번째 인수로 전달한 내용으로 덮어쓰기합니다.
이거는 함정입니다. 매우 위험한 함정입니다.
これが
{ "name" : "mr.a", "age" : 10, "gender" : "m", "hobbies" : [ "programming" ] }
updateすると
db.user.update({name:'mr.a'}, {gender:'X'})
こうなっちゃう
{ "gender" : "X" }
NoSQL 있다.
실은 이것, mr.a씨의 성별을 갱신했다고 하는 것보다, 이름이 mr.a라고 하는 문서를 gender:X라고 하는 문서로 덮어썼다고 하는 것이 됩니다.
덮어쓰기보다는 대체한 느낌.
그럼 어떻게 하는 거야. . . 라고 하는 이야기입니다만, 그 때문에, $set 라고 하는 수식자를 이용할 필요가 있습니다.
본래는, $set를 사용해 이하와 같이 할 필요가 있었던 것입니다.
> db.user.update({name:'mr.a'}, {$set:{gender:'X'}})
elasticsearch보다 간단할지도. NoSQL계는 모두 이런 것일까. update 귀찮고 싫어 버린다.
그리고 이 update에도 함정이 있다.
이것이라면 MongoDB가 처음 찾은 하나만 업데이트됩니다.
동시에 2건 이상의 해당 레코드를 단번에 갱신하려면, 제4 인수에 true를 건네주어야 합니다.
> db.user.update({}, {$set:{gender:'X'}}, false, true)
처음 보기 죽이는거야・・・
upsert
upsert구는 존재하지 않고, update의 제3 인수를 true라고 하는 유감스러운 사양인것 같다. 어느 정도 좋지만
> db.counter.update( {type:'error'} ,{$inc:{count:1}}, true)
컬럼 추가
오늘 알고 싶었던 것은 여기. elasticsearch처럼 라쿠에 컬럼 추가할 수 있을까 라고. 결론 : elasticsearch보다 더 쉽게!
상당히 중요한 점이라고 생각합니다만, MongoDB에서는, RDBMS와 달리 간단하게 필드(컬럼, 열)의 추가를 할 수 있습니다.
이것은 컬렉션(테이블) 자체에 필드 정보가 정의되어 있는 것은 아니고, 어디까지나 문서(레코드, 행) 단위에 필드 정보가 보관 유지되고 있기 때문입니다.
응? ?
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
마술! ! ! ! 원래 컬럼이라는 생각이 없는 것인가. 모든 레코드 독립적입니까? 굉장해! ! ! ! !
공부가 되었습니다! ! 사용해 보자!
Reference
이 문제에 관하여(처음 mongodb), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uturned0/items/f1d8fa1d38c0aa9c8cce
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# コンテナに入る
docker exec -it mongo_mongo_1 bash
# cli起動
root@06e8e28840bb:/# mongo -u root -p example
...
...
...
>
신기사를 따라, 소중한 곳을 뽑아 봅니다.
MongoDB 초입문
htps : // 이 m / 고등어 1024 / ms / f2 아 d56f2 아 3 바 7 아 f8521
놀랍게도 database를 만드는 것은 매우 간단합니다.
> use study
create가 아닌가! use만으로 만들어진다. 멋지다! !
데이터를 넣으면서 선택해 보겠습니다.
> db.stats()
# records 登録
db.user.insert({name:'mr.a', age:10, gender:'m', hobbies:['programming']});
db.user.insert({name:'mr.b', age:20, gender:'m', hobbies:['vi']});
db.user.insert({name:'ms.c', age:30, gender:'f', hobbies:['programming', 'vi']});
db.user.insert({name:'ms.d', age:40, gender:'f', hobbies:['cooking']});
# select * from study
> db.user.find()
# where句
db.user.find( {name:'ms.c'} )
配列(not dict) は文字列のように検索できる
> db.user.find({hobbies:'programming'})
{ "_id" : ObjectId("5ee1a837b84ea8cc6e82073f"), "name" : "ms.c", "age" : 30, "gender" : "f", "hobbies" : [ "programming", "vi" ] }
update 문
MongoDB의 update는 두 번째 인수로 전달한 내용으로 덮어쓰기합니다.
이거는 함정입니다. 매우 위험한 함정입니다.
これが
{ "name" : "mr.a", "age" : 10, "gender" : "m", "hobbies" : [ "programming" ] }
updateすると
db.user.update({name:'mr.a'}, {gender:'X'})
こうなっちゃう
{ "gender" : "X" }
NoSQL 있다.
실은 이것, mr.a씨의 성별을 갱신했다고 하는 것보다, 이름이 mr.a라고 하는 문서를 gender:X라고 하는 문서로 덮어썼다고 하는 것이 됩니다.
덮어쓰기보다는 대체한 느낌.
그럼 어떻게 하는 거야. . . 라고 하는 이야기입니다만, 그 때문에, $set 라고 하는 수식자를 이용할 필요가 있습니다.
본래는, $set를 사용해 이하와 같이 할 필요가 있었던 것입니다.
> db.user.update({name:'mr.a'}, {$set:{gender:'X'}})
elasticsearch보다 간단할지도. NoSQL계는 모두 이런 것일까. update 귀찮고 싫어 버린다.
그리고 이 update에도 함정이 있다.
이것이라면 MongoDB가 처음 찾은 하나만 업데이트됩니다.
동시에 2건 이상의 해당 레코드를 단번에 갱신하려면, 제4 인수에 true를 건네주어야 합니다.
> db.user.update({}, {$set:{gender:'X'}}, false, true)
처음 보기 죽이는거야・・・
upsert
upsert구는 존재하지 않고, update의 제3 인수를 true라고 하는 유감스러운 사양인것 같다. 어느 정도 좋지만
> db.counter.update( {type:'error'} ,{$inc:{count:1}}, true)
컬럼 추가
오늘 알고 싶었던 것은 여기. elasticsearch처럼 라쿠에 컬럼 추가할 수 있을까 라고. 결론 : elasticsearch보다 더 쉽게!
상당히 중요한 점이라고 생각합니다만, MongoDB에서는, RDBMS와 달리 간단하게 필드(컬럼, 열)의 추가를 할 수 있습니다.
이것은 컬렉션(테이블) 자체에 필드 정보가 정의되어 있는 것은 아니고, 어디까지나 문서(레코드, 행) 단위에 필드 정보가 보관 유지되고 있기 때문입니다.
응? ?
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
문서 (레코드, 행) 단위로 필드 정보가 유지되기 때문입니다.
마술! ! ! ! 원래 컬럼이라는 생각이 없는 것인가. 모든 레코드 독립적입니까? 굉장해! ! ! ! !
공부가 되었습니다! ! 사용해 보자!
Reference
이 문제에 관하여(처음 mongodb), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uturned0/items/f1d8fa1d38c0aa9c8cce
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(처음 mongodb), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uturned0/items/f1d8fa1d38c0aa9c8cce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)