[Database] MongoDB Syntax

게맛살맛게·2021년 12월 22일
0

DB

목록 보기
18/23
post-thumbnail

Database

Database 생성

use DATABASE_NAME

> use test		// 없으면 생성
switched to db test
> db			// 현재 사용 DB
test

Database 제거

db.dropDatabase()
❕ 명령어 사용 전, use DATABASE_NAME으로 삭제하고자 하는 데이터 베이스를 선택

> use test
switched to db test
> db.dropDatabase()
{ "ok" : 1 }

Collection

Collection 생성

db.createCollection()

  • Collection을 생성할 때 db.createCollection(name. [options]) 형식으로 사용
    ❕ Collection은 도큐먼트를 최초로 저장할 때 자동으로 생성 되므로 직접 생성하지 않아도 됨
> use test
switched to db test
> db.createCollection("first");
{ "ok" : 1 }
> show collections	// collection 확인
first
 
> db.book.insert({"name":"python","price":10000})	// book collection 자동 생성
WriteResult({ "nInserted" : 1 })
> show collections
book
first

Collection 복사

db.COLLECTION_NAME.copyTo(NEW_COLLECTION_NAME)

> db.book.copyTo("book2")
WARNING: db.eval is deprecated
8

Collection 제거

db.COLLECTION_NAME.drop()

> use test
switched to db test
> show collections
book
first
> db.book.drop()
true
> show collections
first

Document

Document 추가

db.COLLECTION_NAME.insert(document)

> db.book.insert({"name":"java","price":12000})		// 하나씩 삽입
WriteResult({ "nInserted" : 1 })
> db.book.insert({"name":"javascript","price":8000})
WriteResult({ "nInserted" : 1 })

>  db.book.insert([					// 한번에 여러 도큐먼트 배열로 삽입
	{"name": "pandas", "price": 21000},
	{"name": "R", "price": 23000}
	])
BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 2,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})

Document 제거

db.COLLECTION_NAME.remove(criteria [, justONE])

parametertype설명
criteriadocument삭제할 데이터의 기준 값(criteria)
이 값이 { } 이면 컬렉션의 모든 데이터 제거
justOneboolean
선택적(Optional)
매개변수이며 이 값이 true 면 1개 의 다큐먼트만 제거
이 매개변수가 생략되면 기본값은 false 로서, criteria에 해당되는 모든 다큐먼트를 제거
> db.book.remove({"name": "R"})			// 전부 삭제
WriteResult({ "nRemoved" : 2 })
> db.book.remove({"name": "R"}, true)		// 한개의 다큐먼트만 삭제
WriteResult({ "nRemoved" : 1 })

Document 수정

db.COLLECTION_NAME.update({matchQuery}, {updateQuery} [, {optionQuery}])

  • matchQuery : 원하는 값을 찾을 검색 쿼리
  • updateQuery : 일치하는 document를 찾은 후 변경 할 쿼리 입력
  • optionQuery : 동작 방식에 대한 옵션
    • upsert : update와 insert의 합성
      만약 matchQuery에 일치하는 결과가 없는 경우 새로운 값을 추가 할 것인지 여부를 선택
      값은 true/false로 설정하며 기본값은 false
    • multi : 여러 개의 일치하는 document가 존재할 경우 모두 변경
      기본값은 false이며 하나의 document만 변경
// 이름이 python인 도큐먼트의 가격을 변경
> db.book.update({"name": "python"}, { "name" : "python", "price":10000 })
// 이름이 python인 도큐먼트가 price만 가지고 있는 도큐먼트로 변경 됨
> db.book.update({"name": "python"}, {"price":10000 })
// 특정 필드값만 바꾸고 싶을 때 : $set으로 필드 지정
> db.book.update({"name": "python"}, {$set:{"price":10000}})

// 이름이 pandas인 도큐먼트의 가격을 20000으로 바꾸고 없을시 새로 생성
> db.book.update({"name": "pandas"}, { "name" : "pandas", "price":20000 }, {upsert : true} )

Document 조회

db.COLLECTION_NAME.find(query, projection)

find()

원형(find())으로 사용 시 전부 출력

> db.book.find()
{ "_id" : ObjectId("61c2c81dfe50f580f7bfb2e3"), "name" : "python", "price" : 10000 }
{ "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"), "name" : "java", "price" : 12000 }
{ "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"), "name" : "javascript", "price" : 8000 }
{ "_id" : ObjectId("61c2c8d3fe50f580f7bfb2e6"), "name" : "html5", "price" : 8000 }
{ "_id" : ObjectId("61c2c8defe50f580f7bfb2e7"), "name" : "django", "price" : 20000 }
{ "_id" : ObjectId("61c2c8e6fe50f580f7bfb2e8"), "name" : "spark", "price" : 25000 }
  • 특정 열을 출력 / 출력 X
>  db.book.find({},{'name' : 1})		// name만 출력, but id는 기본 출력
{ "_id" : ObjectId("61c2c81dfe50f580f7bfb2e3"), "name" : "python" }
{ "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"), "name" : "java" }
{ "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"), "name" : "javascript" }
{ "_id" : ObjectId("61c2c8d3fe50f580f7bfb2e6"), "name" : "html5" }
{ "_id" : ObjectId("61c2c8defe50f580f7bfb2e7"), "name" : "django" }
{ "_id" : ObjectId("61c2c8e6fe50f580f7bfb2e8"), "name" : "spark" }

> db.book.find({},{'name' : true})		// name만 출력, but id는 기본 출력
{ "_id" : ObjectId("61c2c81dfe50f580f7bfb2e3"), "name" : "python" }
{ "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"), "name" : "java" }
{ "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"), "name" : "javascript" }
{ "_id" : ObjectId("61c2c8d3fe50f580f7bfb2e6"), "name" : "html5" }
{ "_id" : ObjectId("61c2c8defe50f580f7bfb2e7"), "name" : "django" }
{ "_id" : ObjectId("61c2c8e6fe50f580f7bfb2e8"), "name" : "spark" }

> db.book.find({},{'name' : 1, '_id' : 0})	// name만 출력, id도 강제로 출력 X
{ "name" : "python" }
{ "name" : "java" }
{ "name" : "javascript" }
{ "name" : "html5" }
{ "name" : "django" }
{ "name" : "spark" }

> db.book.find({},{'name' : true, '_id' : false})// name만 출력, id도 강제로 출력 X
{ "name" : "python" }
{ "name" : "java" }
{ "name" : "javascript" }
{ "name" : "html5" }
{ "name" : "django" }
{ "name" : "spark" }
  • 앞쪽 {}는 조건, 뒤쪽 {}는 출력 key 설정
> db.book.find({price : {$lt : 10000}}, {name : true, price : true, _id : false})
{ "name" : "javascript", "price" : 8000 }
{ "name" : "html5", "price" : 8000 }
  • 조건부(앞쪽 {})의 and 연산
> db.book.find({$and : [ {price : {$gte : 10000}},{price : {$lt : 20000}}]},
	{name : true, price : true, _id : false})
{ "name" : "python", "price" : 10000 }
{ "name" : "java", "price" : 12000 }
  • 찾을 key와 value를 설정
> db.book.find({"name": "javascript"})
{ "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"), "name" : "javascript", "price" : 8000 }
> db.book.find({"name": { "$regex" : "^java"}})
{ "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"), "name" : "java", "price" : 12000 }
{ "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"), "name" : "javascript", "price" : 8000 }
> db.book.find({"price": { "$gt" : 8000}})
{ "_id" : ObjectId("61c2c81dfe50f580f7bfb2e3"), "name" : "python", "price" : 10000 }
{ "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"), "name" : "java", "price" : 12000 }
{ "_id" : ObjectId("61c2c8defe50f580f7bfb2e7"), "name" : "django", "price" : 20000 }
{ "_id" : ObjectId("61c2c8e6fe50f580f7bfb2e8"), "name" : "spark", "price" : 25000 }

pretty()

출력 결과를 정리하여 출력

> db.book.find().pretty()		// 정리 후 출력
{
        "_id" : ObjectId("61c2c81dfe50f580f7bfb2e3"),
        "name" : "python",
        "price" : 10000
}
{
        "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"),
        "name" : "java",
        "price" : 12000
}
{
        "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"),
        "name" : "javascript",
        "price" : 8000
}
{
        "_id" : ObjectId("61c2c8d3fe50f580f7bfb2e6"),
        "name" : "html5",
        "price" : 8000
}
{
        "_id" : ObjectId("61c2c8defe50f580f7bfb2e7"),
        "name" : "django",
        "price" : 20000
}
{
        "_id" : ObjectId("61c2c8e6fe50f580f7bfb2e8"),
        "name" : "spark",
        "price" : 25000
}

sort()

> db.book.find().sort({"price": 1})		// 정렬 (-1은 Desc)
{ "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"), "name" : "javascript", "price" : 8000 }
{ "_id" : ObjectId("61c2c8d3fe50f580f7bfb2e6"), "name" : "html5", "price" : 8000 }
{ "_id" : ObjectId("61c2c81dfe50f580f7bfb2e3"), "name" : "python", "price" : 10000 }
{ "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"), "name" : "java", "price" : 12000 }
{ "_id" : ObjectId("61c2c8defe50f580f7bfb2e7"), "name" : "django", "price" : 20000 }
{ "_id" : ObjectId("61c2c8e6fe50f580f7bfb2e8"), "name" : "spark", "price" : 25000 }
  • 여러 key 설정 가능 (나온 순서대로 적용)
> db.book.find().sort({"price": -1, "name": 1})
{ "_id" : ObjectId("61c2c8e6fe50f580f7bfb2e8"), "name" : "spark", "price" : 25000 }
{ "_id" : ObjectId("61c2c8defe50f580f7bfb2e7"), "name" : "django", "price" : 20000 }
{ "_id" : ObjectId("61c2c8bffe50f580f7bfb2e4"), "name" : "java", "price" : 12000 }
{ "_id" : ObjectId("61c2c81dfe50f580f7bfb2e3"), "name" : "python", "price" : 10000 }
{ "_id" : ObjectId("61c2c8d3fe50f580f7bfb2e6"), "name" : "html5", "price" : 8000 }
{ "_id" : ObjectId("61c2c8c8fe50f580f7bfb2e5"), "name" : "javascript", "price" : 8000 }
profile
IT 기술블로그

0개의 댓글