몽고DB CRUD 및 기본 명령어모음

column clash·2021년 10월 3일
0
post-custom-banner

Mongo DB 기본 명령어

Create

db.fruits.save({ name: 'apple', price: 2000, store: "abc market", inventory: 10 }); // WriteResult({ nInserted: 1 })

db.fruits.insert([{ name: 'banana', price: 2500, store: "abc market", inventory: 10 } }, { name: 'tomato', price: 2300, store: "abc market", inventory: 10 } }]);

Read

db.fruits.find({ }); // { 결과들 }
db.fruits.find({ name: 'apple' });

db.fruits.find({ name: 'apple', price: 2000 });

// name이 apple이고
price가 2000인 다큐먼트

db.fruits.find({ $or: [{ name: 'apple' }, { price: 2500 }] });
// name이 apple이고 price가 2500인

db.fruits.find({ price: { $lt: 2100 } }); // price가 2500보다 다큐먼트

db.monsters.findOne({ name: 'apple' });

db:zero {
_id: ObjectId('...'),
actor: {
name: 'steve',
birth: 1979
},
cast: ['avenger', 'castaway']
}

db.zero.find({ 'actor.birth': 1979 });
db.zero.find({ cast: 'avenger' });

db.fruits.findOne({ name: 'apple' }, { name: true, price: true, _id: false});

update

db.fruits.update({ name: 'apple' }, { $set: { price: 2500 } }); // WriteResult({ nMatched: 1, nUpserted: 0, nModified: 1 });

db.fruits.update({ name: 'apple' }, { $inc: { inventory: -5 } }); // WriteResult({ nMatched: 1, nUpserted: 0, nModified: 1 });

db.fruits.findAndModify({ query: { name: 'banana' }, update: { $set: { price: 2300 } }, new: true });

UpdateOne, UpdateMany, ReplaceOne

db.fruits.updateOne({ name: 'banana' }, { $set: { price: 2500 } });

ReplaceOne 통채로 바꿈. $set 없이 하는 것과 같음.

FindOneAndUpdate, FindOneAndReplace
db.fruits.findOneAndUpdate({ name: 'banana
' }, { $set: { price: 2500 } }, { returnNewDocument: true }); // { 데몬 }

Upsert (update 대상이 있으면 업데이트 하고 없으면 insert)
update, updateOne, updateMany, replaceOne
findAndModify, findOneAndUpdate, findOneAndReplace
에 { upsert: true } 추가

Delete

db.fruits.remove({ });
db.fruits.remove({ name: 'banana' }); // WriteResult({ 'nRemoved': 1 })

DeleteOne, DeleteMany

db.monsters.deleteOne({ name: 'banana' });

비교,논리 쿼리

비교

비교1

$gt (해당 값보다 큰)
{ 필드: { $gt: 값 } }
$lt  ( 작은)
$gte (크거나 같은)
$lte (작거나 같은)

비교2

{ 필드: { $eq: 값 } }
$eq (같은)
$ne (일치하지 않는)
$in (여러 조건 중 하나라도 맞으면)
{ 필드: { $in: [ 값1, 값2, 값3, ... ] }
$nin 

논리

$or (여러개의 조건 중 적어도 하나를 만족) 반대 $nor
{ $or: [{ 조건1 }, { 조건2 }, ...] }

$and (모든 조건이 맞아야)
{ $and: [
  { $or: [{ 조건1 }, { 조건2 }] },
  { $or: [{ 조건3 }, { 조건4 }] }
] }


$not 
{ $not: { 조건 } }

필드 수정 연산자

db.fruits.update({ name: 'apple' }, { $inc: { inventory: -5 } });
{ $inc: { 필드: 숫자 } }
{ $mul: { 필드: 숫자 } }
{ $rename: { 필드1: 이름, 필드2: 이름, ... } }

db.fruits.update({ name: 'apple' }, { $set: { price: 2500 } });
{ $set: { 필드1: 값, 필드2: 값, ... } }


$setOnInsert (upsert의 경우에만)
$unset
해당 필드를 제거. 만약 배열의 요소를 $unset한 경우 제거하지 않고 null

$min, $max
필드의 값이 주어진 값보다 클 경우 새 값으로 교체 만약 원래 값이 200이었고 $min의 값이 150이었다면 150으로 바뀜. 기존 기록을 경신하는 경우 사용
{ $min: { 필드1: 값, 필드2: 값, ... } }

$currentDate
{ $currentDate: { 필드: true } }
{ $currentDate: { 필드: { $type: 'timestamp' } } }

배열 수정 연산자

$

list: [1, 2, 3] 
db.culture.update({ list: 2 }, { 'list.$': 5 }) // list: [1, 5, 3]

$push

 $push
 db.users.update({"username" : "test"}, {$push : {"email" : "test@test.com"}});
 
 결과
 { "_id" : ObjectId("52e3d4dd623bbd008840d671"), "age" : 25, "email" : [  "test@test.com" ], "username" : "test" }
  
 { $push: { 필드1: 값, 필드2: 값, ... } }
 [1, 2, [3, 4, 5]]
 { $push: { 필드: { $each: 배열 } } }
 [1, 2, 3, 4, 5]
 

$addToSet
배열필드에 해당 요소가 없으면 추가,
있으면 아무것도 하지 않음
$each 한 번에 배열을 집어넣기 때문에 따로따로 넣고 싶다면
{ $addToSet: { 필드: { $each: 배열 } } }


  db.users.update({"username" : "test"}, {"$addToSet" : {"email" : {"$each" : ["test1@test1.com", "test2@test2.com", "test3@test3.com"]}}})

문서에 아래와 같이 배열을 추가할 수 있으며, 배열에서 조작을 위해 아래의 제한자들을 사용할 수 있다.

db.person.update({ name : "neo"}, { $set : { favor_no : [1,2] } })

db.person.update({ name : "joe"}, { $set : { favor_no : [3] } })

$all

배열 내에 하나 이상의 요소가 일치하는 배열을 찾을 때 사용한다.

db.person.find({ favor_no : { $all : [1,2,3] } })

$size

주어진 크기인 배열을 반환

db.person.find({ favor_no : { $size : 2 } })

$slice

문서 내의 배열의 값을 지정된 수 만큼만 조회할 때 사용

db.person.find({}, { favor_no : { $slice : 1 } })

1만큼 제외하고 나머지 두 개를 조회

db.person.find({}, { favor_no : { $slice : [1,2] } })

1만큼을 뒤에서부터 제외하고, 앞에서부터 두 개를 조회

db.person.find({}, { favor_no : { $slice : [-1,2] } })

$push

배열 내에 지정된 키가 존재한다면 끝에, 존재하지 않는다면 새로운 배열을 생성하여 특정 값을 추가한다.

db.person.update( { name : "neo" }, { $push : { "contact" : { "mobile" : "010-1111-1111", "phone" : "02-111-1111" } } } )

$addToSet

$push와 동일한 기능을 하지만, 중복된 데이터는 추가되지 않는다.

db.person.update( { name : "neo" }, { $addToSet : { "emaillist" : "neo@neo.com" } } )

$each

$addToSet 내에 사용되며 배열에 여러 값들을 추가한다.

db.person.update( { name : "neo" }, { $addToSet : { "emaillist" : { $each : ["neo2@neo.com", "neo3@neo.com"] } } } )

$pull

지정한 조건에 따른 배열의 요소를 제거한다.

db.person.update( { age : 20 }, { $pull : { "emaillist" : "neo@neo.com" } } )

$pop

배열의 처음이나 마지막 요소를 제거한다.

db.person.update( { name : "neo" }, { $pop : { emaillist : 1 } } ) // 마지막

db.person.update( { name : "neo" }, { $pop : { emaillist : -1 } } ) // 처음

profile
풀스택 개발 중...
post-custom-banner

0개의 댓글