개요
지금까지 MongoDB를 다루며 사용했던 operator들을 정리했다.
[Query] Array Query Operators: $elemMatch
독스: https://www.mongodb.com/docs/manual/reference/operator/query/elemMatch/
예를 들어, wordList라는 array에 들어있는 document들 중 그 속성(isCurrent)이 true인 것만 fetch하는 쿼리문:
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되게 사용 가능.
(독스 예시)
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/
값을 원하는 만큼 증가/감소시킬 수 있음.
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에 값을 추가
db.sessions.updateOne(
{ _id: id },
{ $push: { records: data } }, //공식 문서 보고 함!!
)
$pull 은 Array의 특정 값을 제거. 맨 앞/맨 뒤의 element를 제거하는 $pop도 있다.
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의 값을 업데이트할 때 사용했다.
db.sets.updateOne(
{
'wordList._id': ObjectId('646307ea10cdb774275dce6b'),
},
{ $set: { 'wordList.$[word].isCurrent': true } },
{ arrayFilters: [{ 'word._id': ObjectId('646307ea10cdb774275dce6b') }] },
)