MongoDB의 구조와 CRUD를 위한 메서드

pengooseDev·2022년 12월 30일
0
post-thumbnail

CRUD Method

> 공식문서

  • BSON : Binary JSON(이진 JSON 타입)으로 Object(JS, TS)Dictionary(Python) 를 사용

1. Create

db.collection.insertOne()

doc(BSON)을 매개변수로 받는다.
type은 Object(JS, TS)Dictionary(Python)를 사용한다.

from pymongo import MongoClient
client = MongoClient('URL')
db = client.pengoose #DB 생성

#doc생성
doc = {
    'nickName': 'pengoose',
    'authentication': True
}

#collection에 데이터 추가
db.myCollection.insert_one(doc)

성공한 경우

데이터 생성에 성공했다면, document의 _id를 return한다.

{
	"acknowledged": True,
    "insertedId": ObjectID("e8d7f8g3fae014gc3c")
}

db.collection.insertMany()

여러개의 docs를 Collection에 생성할 때 사용한다.
doc(BSON)이 담긴 배열을 매개변수로 받는다.

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])

성공한 경우

데이터 생성에 성공했다면, 각 결과값에 대한 _id를 return한다.

{
	"acknowledged": True,
    "insertedId": [
    	ObjectID("18d7f8g3fae014gc3c")
    	ObjectID("28d7f8g3fae014gc3c")
    	ObjectID("38d7f8g3fae014gc3c")
    	ObjectID("48d7f8g3fae014gc3c")
    	ObjectID("58d7f8g3fae014gc3c")
	]
}

2. Read

db.collection.find()

find메서드를 이용해 DB를 탐색한다.

#db.collection.find(query, projection, options)
queryById = db.bios.find( { _id: 5 } )

queryByName = db.bios.find( { "name.last": "Hopper" } )

queryByRegex = db.bios.find(
   { "name.last": { $regex: /^N/ } }
)

findByQuerys = db.bios.find( {
   birth: { $gt: new Date('1920-01-01') },
   death: { $exists: false }
} )

비교연산자와 논리연산자를 사용할 수 있다.

 $eq  : 지정된 값과 같은 값을 찾습니다.
 $gt  : 지정된 값보다 큰 값을 찾습니다.
 $gte : 지정된 값보다 크거나 같은 값을 찾습니다.
 $in  : 배열에 지정된 모든 값과 일치합니다.
 $lt  : 지정된 값보다 작은 값을 찾습니다.
 $lte : 지정된 값보다 작거나 같은 값을 찾습니다.
 $ne  : 지정된 값과 같지 않은 모든 값과 일치합니다.
 $nin : 배열에 지정된 값과 일치하지 않습니다.
#Example
db.collection.find( { qty: { $gt: 4 } } )
 $and : AND두 절의 조건과 일치하는 모든 문서를 논리적으로 반환하는 쿼리 절을 조인합니다.
 $not : 쿼리 식의 효과를 반전시키고 쿼리 식과 일치 하지 않는 문서를 반환합니다.
 $nor : 쿼리 절을 논리적으로 조인하여 NOR두 절과 일치하지 않는 모든 문서를 반환합니다.
 $or : OR두 절의 조건과 일치하는 모든 문서를 논리적으로 반환하는 쿼리 절을 조인합니다.

성공한 경우

데이터 탐색에 성공했다면, 데이터_id를 return한다.

{
    "_id": ObjectID("58d7f8g3fae014gc3c"),
    "nickName": "pengoose",
    'authentication': True
	
}

3. Update

db.Collection.update({ matchQuery }, { updateQuery }, { optionQuery })

  • matchQuery: 원하는 값을 찾기위해 사용하는 조건 쿼리
  • updateQuery: matchQuery에 일치하는 document를 찾은 후 변경할 쿼리
  • optionQuery: (옵션) 추가적으로 동작 방식 및 옵션을 사용

db.collection.updateOne()

하나의 document를 수정한다. DB를 수정하기 위해선, 수정할 타겟을 찾아야한다.
따라서, 가장 첫 매개변수는 find할 데이터의 조건(query)이다.
여러 document가 return될 경우, 가장 앞 index의 document를 update한다.

# document : { nickName: "pengoose" }
db.Collection.updateOne(
	{ nickName: "pengoose" }, #find하는데 사용될 query
    { nickName: "pengooseDev", rank: 3 }
)

# document : { nickName: "pengooseDev", rank: 3 }

첫 번째 매개변수로 document를 찾은 뒤,
두 번째 매개변수에서 주어진 field들을 대체한다.

특정 Key값에 대한 Value. 즉, 특정 field만 수정하고자 하는 경우엔 $set 메서드를 사용한다.

# document : { nickName: "pengoose", rank: 3 }
db.Collection.updateOne(
	{ nickName: "pengoose" }, 
    { $set: { rank: 1 } }
)

# document : { nickName: "pengoose", rank: 1 }

첫 번째 query로 탐색에 실패했을 경우, 데이터의 변경 또한 일어나지 않는다. 데이터 탐색에 실패했을 경우, 해당 데이터를 생성하고자한다면, upsert메서드를 사용한다.

# document : Null
db.Collection.updateOne(
	{ nickName: "pengoose" }, #find 실패 
    { nickName: "pengoose", rank: 3 },
    { { upsert: True } } #upsert Option True
)

# document : { nickName: "pengoose", rank: 3 }

db.collection.updateMany()

여러 데이터를 수정하는 상황에서 사용한다. 사용법은 동일.

db.Collection.updateMany(
	{ "rank": { $lt: 100 } },
    $set: { retire: True }
)

#100등 밖의 객체들에 retire: True 속성 부여.

db.collection.replaceOne()

db.collection.replaceOne(filter, replacement, options)

replaceOne은 field가 아닌 document를 대체한다.

#document : {nickName: "pengoose"}
db.Collection.replaceOne(
	 {nickName: "pengoose"},
     {age: 10}
)

#document : {age: 10}

4. Delete

db.collection.deleteOne()

조회된 document 중, 가장 앞쪽의 document를 삭제한다.

db.collection.deleteOne({<field>: <value>})

db.collection.deleteMany()

조회된 document를 전부 삭제한다.

#아래의 방법으로 모든 데이터 삭제가 가능하다.
db.collection.deleteMany({})

ref

공식문서
MongoDB CRUD 사용

0개의 댓글