Using Docker
version: '3.1'
services:
mongo:
image: mongo
container_name: local-mongo
restart: always
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: <root username>
MONGO_INITDB_ROOT_PASSWORD: <root password>
volumes:
- ~/workspace/dockerdata/mongo/data:/data/db
- ~/workspace/dockerdata/mongo/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js
networks:
- local-tier
mongo-express:
image: mongo-express
container_name: local-mongo-express
restart: always
ports:
- "8081:8081"
environment:
ME_CONFIG_MONGODB_SERVER: mongo
ME_CONFIG_MONGODB_ADMINUSERNAME: <root username>
ME_CONFIG_MONGODB_ADMINPASSWORD: <root password>
ME_CONFIG_BASICAUTH_USERNAME: <mongo-express username>
ME_CONFIG_BASICAUTH_PASSWORD: <mongo-express password>
depends_on:
- mongo
networks:
- local-tier
networks:
local-tier:
external: true
$ brew install mongosh
Using Mongosh
Local MongoDB
$ mongosh
or
$ mongosh "mongodb://localhost:27017"
or
$ mongosh --port 28015
or
$ mongosh --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p
Remote MongoDB
$ mongosh "mongodb://mongodb0.example.com:28015"
or
$ mongosh --host mongodb0.example.com --port 28015
or
$ mongosh "mongodb://mongodb0.example.com:28015" --username <name> --password <password> --authenticationDatabase <database>
or
$ mongosh "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA"
mongodb 에는 database 를 새로 생성하기 위해서 create command 가 아닌 use command 를 사용해야 한다고 한다. 여기서 주의할 점은 새로 만든 database의 collection에 실제로 데이터를 insert 해야 그때 database 가 생성된다고 한다.
$ show dbs
admin 0.000GB
local 0.000GB
$ use practice
$ show dbs
admin 0.000GB
local 0.000GB
$ db.users.insertOne({name: 'onyou', age: 13})
completed in 246 ms
$ show dbs
admin 0.000GB
local 0.000GB
practice 0.000GB
Show Collection List
$ show collections
$ use practice
$ db.createUser(
{
user: "<username>",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "readWrite", db: "practice" }]
}
)
Show All Users
$ db.system.users.find()
[
{
_id: 'admin.root',
userId: new UUID("0cb9029e-b564-4bd6-a02a-bb6b5cc7bef6"),
user: 'root',
db: 'admin',
credentials: {
'SCRAM-SHA-1': {
iterationCount: 10000,
salt: '/qLdMyJud2MZrr2kYOOywg==',
storedKey: 'GMHBeOvJATNBAEb5ChBY0FXW+oA=',
serverKey: 'xxZG120c6rXIUXvyQ3SmIpi9jEI='
},
'SCRAM-SHA-256': {
iterationCount: 15000,
salt: 'Jg71PCiiCOPLZgOX+Oxq9b5tsc5U6PVNCd7c6A==',
storedKey: 'mwXKRebeyBaKfcU9kbKi4ckq2pAFBqTWmW7kiOQ55tc=',
serverKey: 'dZ5O7vLpmW8UWTbnzs11Rvre4iuQvR4VTqiZ2bDgHaQ='
}
},
roles: [ { role: 'root', db: 'admin' } ]
},
{
_id: 'practice.user1',
userId: new UUID("ed94f7ca-d97f-431b-bd6f-2c560c71009f"),
user: 'user1',
db: 'practice',
credentials: {
'SCRAM-SHA-1': {
iterationCount: 10000,
salt: '9eQ6D/YFM4Ryx/BIZv2LIA==',
storedKey: 'QDXBzc2iTRZEhh/RhU7IA2Ljff8=',
serverKey: 'PqmvTjWx47cwdErcpTSAty58jes='
},
'SCRAM-SHA-256': {
iterationCount: 15000,
salt: 'UyUiZ/G50MWoYo3B+nz81ilQGkq6JbcI6fU2xw==',
storedKey: 'CUr7E+LvwyV2PctgZWNcWXniszpxMhEZVro9HJk8C3A=',
serverKey: 'O6DAttVI44o14qsKimnoc1AJzfYTM9zmwwd13zwjaiA='
}
},
roles: [ { role: 'readWrite', db: 'practice' } ]
}
]
Insert
Mutiple Documents
db..insertMany({…})
$ db.users.insertMany([
... {name: 'rm', age: 29},
... {name: 'jin', age: 31},
... {name: 'suga', age: 30},
... {name: 'j-hop', age: 29},
... {name: 'jimin', age: 28},
... {name: 'v', age: 28},
... {name: 'jk', age: 26},
... ])
{
acknowledged: true,
insertedIds: {
'0': ObjectId("647b12a121feb6db1e68be5f"),
'1': ObjectId("647b12a121feb6db1e68be60"),
'2': ObjectId("647b12a121feb6db1e68be61"),
'3': ObjectId("647b12a121feb6db1e68be62"),
'4': ObjectId("647b12a121feb6db1e68be63"),
'5': ObjectId("647b12a121feb6db1e68be64"),
'6': ObjectId("647b12a121feb6db1e68be65")
}
}
Single Document
db..insertOne({…})
$ db.users.insertOne({name: 'eujin', age: 6})
{
acknowledged: true,
insertedId: ObjectId("647b134421feb6db1e68be66")
}
Select
Find All
db..find()
$ db.users.find()
[
{ _id: ObjectId("647b0864e5835527d662b96f"), name: 'onyou', age: 13 },
{ _id: ObjectId("647b12a121feb6db1e68be5f"), name: 'rm', age: 29 },
{ _id: ObjectId("647b12a121feb6db1e68be60"), name: 'jin', age: 31 },
{ _id: ObjectId("647b12a121feb6db1e68be61"), name: 'suga', age: 30 },
{ _id: ObjectId("647b12a121feb6db1e68be62"), name: 'j-hop', age: 29 },
{ _id: ObjectId("647b12a121feb6db1e68be63"), name: 'jimin', age: 28 },
{ _id: ObjectId("647b12a121feb6db1e68be64"), name: 'v', age: 28 },
{ _id: ObjectId("647b12a121feb6db1e68be65"), name: 'jk', age: 26 },
{ _id: ObjectId("647b134421feb6db1e68be66"), name: 'eujin', age: 6 }
]
db..find({ … filter condition … })
$ db.users.find({ _id: ObjectId("647b0864e5835527d662b96f") })
[
{ _id: ObjectId("647b0864e5835527d662b96f"), name: 'onyou', age: 13 }
]
$ db.users.find({ name: 'jimin'})
[
{ _id: ObjectId("647b12a121feb6db1e68be63"), name: 'jimin', age: 28 }
]
$ db.users.find({ age: { $lt: 30 }, name : { $regex: /^j/i }})
[
{ _id: ObjectId("647b12a121feb6db1e68be62"), name: 'j-hop', age: 29 },
{ _id: ObjectId("647b12a121feb6db1e68be63"), name: 'jimin', age: 28 },
{ _id: ObjectId("647b12a121feb6db1e68be65"), name: 'jk', age: 26 }
]
특정 필드만 출력할 때 사용하기
db.collection.find(query, projection, options)
$ db.users.find( { }, { _id: 0 } ) // 0: 출력 결과물에서 제외처
[
{ name: 'estel', age: 39 },
{ name: 'rm', age: 29 },
{ name: 'jin', age: 31 },
{ name: 'suga', age: 30 },
{ name: 'j-hop', age: 29 },
{ name: 'jimin', age: 28 },
{ name: 'v', age: 28 },
{ name: 'jk', age: 26 },
{ name: 'eujin', age: 6 },
{ name: 'onyou', age: 13 }
]