Object(JS, TS)
나 Dictionary(Python)
를 사용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")
}
여러개의 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")
]
}
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
}
db.Collection.update({ matchQuery }, { updateQuery }, { optionQuery })
하나의 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(
{ "rank": { $lt: 100 } },
$set: { retire: True }
)
#100등 밖의 객체들에 retire: True 속성 부여.
db.collection.replaceOne(filter, replacement, options)
replaceOne은 field가 아닌 document를 대체한다.
#document : {nickName: "pengoose"}
db.Collection.replaceOne(
{nickName: "pengoose"},
{age: 10}
)
#document : {age: 10}
조회된 document 중, 가장 앞쪽의 document를 삭제한다.
db.collection.deleteOne({<field>: <value>})
조회된 document를 전부 삭제한다.
#아래의 방법으로 모든 데이터 삭제가 가능하다.
db.collection.deleteMany({})