MongoDB operator 정리
개요
지금까지 MongoDB를 다루며 사용했던 operator들을 정리했다.
[Query] Array Query Operators: $elemMatch
독스: https://www.mongodb.com/docs/manual/reference/operator/query/elemMatch/
예를 들어, wordList라는 array에 들어있는 document들 중 그 속성(isCurrent)이 true인 것만 fetch하는 쿼리문:
1
db.sets.find({'wordList.isCurrent': true}, {'wordList':{$elemMatch: {isCurrent:true}}})
[Query] Logical Query Operators: $and $or $not $nor
독스: https://www.mongodb.com/docs/manual/reference/operator/query-logical/
복잡한 조건을 걸어서 query할 수 있음. logical operator끼리도 nested되게 사용 가능.
(독스 예시)
1
2
3
4
5
6
db.inventory.find( {
$and: [
{ $or: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } } ] },
{ $or: [ { sale: true }, { price : { $lt : 5 } } ] }
]
} )
[Update] Field Update Operators: $inc
독스: https://www.mongodb.com/docs/manual/reference/operator/update/inc/
값을 원하는 만큼 증가/감소시킬 수 있음.
1
2
3
4
db.sessions.updateOne(
{ _id : sessionId , 'records._id' : recordId },
{ $inc: { 'records.$.record' : 2000}}
)
[Update] Array Update Operators: $push $pull $pop
독스: https://www.mongodb.com/docs/manual/reference/operator/update/push/
$push 는 Array에 값을 추가
1
2
3
4
db.sessions.updateOne(
{ _id: id},
{ $push: { records: data }} //공식 문서 보고 함!!
);
$pull 은 Array의 특정 값을 제거. 맨 앞/맨 뒤의 element를 제거하는 $pop도 있다.
1
2
3
4
db.sessions.updateOne(
{ _id : sessionId },
{ $pull: {records : {_id : { $in : recordId}}}}
)
[Update] Array Update Operators: $[<identifier>], arrayFilter
독스: https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/
영어 단어장에서 단어들을 저장하는 Array인 wordList에서 특정 단어의 document를 id로 찾아 그 document의 ‘isCurrent’라는 field의 값을 업데이트할 때 사용했다.
1
2
3
4
5
db.sets.updateOne( {
'wordList._id':ObjectId('646307ea10cdb774275dce6b')},
{$set: {'wordList.$[word].isCurrent':true}},
{arrayFilters: [{"word._id": ObjectId('646307ea10cdb774275dce6b')}]
} )