mongoDB추가

이규현·2025년 1월 17일

NoSQL인 몽고디비

Database

몽고디비에서 Table == collection

recodes, row == document

몽고디비는 데이터베이스와 컬렉션, 다큐먼트로 이루어짐.

테이블 내부의 정보들은 다큐먼트 역할.

  • mongodb 추가설명 RDBMS(공유, 중복X) User 테이블
    IDUsernamePhone
    1user1010-111
    2user2010-222
    IDTitleContentUserId
    1title1content11
    2title2content22
    MongoDB(NoSQL) 컬렉션
    user: [
    
    { id:1, Username: user1, Phone:"010-111"},
    
    { id:2, Username:user2, Phone:"010-222"}
    
    ]
    
    Board:[
    { id:1, Title:title1,Content:content1, Username:user1, Phone:"010-111" },
    { id:2, Title:title2, Content:content2, Username:user2, Phone:"010-222" },
    	.
    	.
    	.
    ]
    
    //장점: 데이터 찾을 때 퍼포먼스가 좋다.

database : 조회, 생성 접속

//database 조회
> show dbs

//database 접속 및 생성
> use [database 이름]

//현재 사용중인 database 조회
> db

Collection: 생성, 조회, 삭제

//생성
> db.createCollection("[컬렉션 이름]")

//collection(table) 조회
> show collectuons

//삭제
> db.[컬렉션 이름].drop()

Document: 삽입, 삭제, 수정, 조회

//삽입
> db.[컬렉션 이름].insert({"key": "value"})

//삭제
> db.[컬렉션 이름].remove({"key": "value"}, true)

//수정
//("key1", "value1") 내용 -> ("key2":"value2")로 수정
> db.[컬렉션 이름].update({"key1":,"value1"}, {$set:{"key2","value2"}})

//조회
> db.[컬렉션 이름].find()

//정렬해서 조회(예쁘게 조회)
> db.[컬렉션 이름].find().pretty()

//부분조회 1
//key1이 value인 document 찾기
> db.[컬렉션 이름].find({"key1":"value"})

//부분조회 2
//key1이 value인 key2값 찾기 && id는 출력X
> db.[컬렉션 이름].find({"key1":"value"},{"_id":false,"key2":true})

mongo DB 추가 문법

  1. 비교

    $eq: 동일한 값

    $ne: 다른 값

    $gt: 큰 값

    $gre: 크거나 같은 값

    $lt: 작은 값

    $lte: 작거나 같은 값

    $in: 배열에 속하는 어떤 값

    $nin: 배열에 속하지 않은 어떤 값

  1. 요소

    $exists

    $type

  1. 논리

    $or

    $and

    $not

    $nor

  2. 평가

    $mod

    $regex: 정규표현식과 일치하는 documnet 선택

    $text: 텍스트 검색

    $where: javascript

  3. 배열

    $all: 모든 요소 포함하는 배열

    $elemMatch: 지정된 조건과 모두 일치

    $size

  4. 제한자

    $set $unset

    $nc $inc

    $push $pull

    $addToSet

    $each

    $pop

사용하기

//데이터베이스 만들기.
use database // -> switched to db database

//collection 만들기
> db.collection.insertOne({name: "홍길동"})

//조회
db.col2.find()

//상세조회
db.col2.find({name: "이규현" })

Cursor

커서(cursor)란?

  • 몽고디비는 조회를 할 때, find명령어를 통해 도큐먼트를 호출한다.
  • 커서를 사용해 find의 결과를 반환
  • 또는 find의 결과로 Document자체를 반환하지 않고 커서(객체)를 반환
  • 커서는 쿼리 결과에 대한 포인터라고 할 수 있음.

커서(Cursor) 사용 이유

  • 커서는 포인터. 즉, 도큐먼트(데이터)의 위치 정보가 들어가 있다.
  • 포인터를 통해 도큐먼트(데이터)를 빠르게 조회할 수 있다.
  • 도큐먼트(데이터)를 직접적으로 보여주는 것에 비해 편리성, 성능을 향상시킨다.
for(x=0; x<100; x++)
	{db.col3.insertOne({"a":x})}

100개의 데이터를 생성 후

find 사용

{ _id: ObjectId("629566113a5bcee96d63bdc5"), a: 0 }
{ _id: ObjectId("629566123a5bcee96d63bdc6"), a: 1 }
{ _id: ObjectId("629566123a5bcee96d63bdc7"), a: 2 }
{ _id: ObjectId("629566123a5bcee96d63bdc8"), a: 3 }
{ _id: ObjectId("629566123a5bcee96d63bdc9"), a: 4 }
{ _id: ObjectId("629566123a5bcee96d63bdca"), a: 5 }
{ _id: ObjectId("629566123a5bcee96d63bdcb"), a: 6 }
{ _id: ObjectId("629566123a5bcee96d63bdcc"), a: 7 }
{ _id: ObjectId("629566123a5bcee96d63bdcd"), a: 8 }
{ _id: ObjectId("629566123a5bcee96d63bdce"), a: 9 }
{ _id: ObjectId("629566123a5bcee96d63bdcf"), a: 10 }
{ _id: ObjectId("629566123a5bcee96d63bdd0"), a: 11 }
{ _id: ObjectId("629566123a5bcee96d63bdd1"), a: 12 }
{ _id: ObjectId("629566123a5bcee96d63bdd2"), a: 13 }
{ _id: ObjectId("629566123a5bcee96d63bdd3"), a: 14 }
{ _id: ObjectId("629566123a5bcee96d63bdd4"), a: 15 }
{ _id: ObjectId("629566123a5bcee96d63bdd5"), a: 16 }
{ _id: ObjectId("629566123a5bcee96d63bdd6"), a: 17 }
{ _id: ObjectId("629566123a5bcee96d63bdd7"), a: 18 }
{ _id: ObjectId("629566123a5bcee96d63bdd8"), a: 19 }
Type "it" for more

생략해서 보여준다.

갯수를 확인해보면 100개가 맞음.

var cursor = db.col3.find()   # cursor라는 변수에 결과를 할당함
cursor                        # 똑같이 20개 데이터 출력

{ _id: ObjectId("629566113a5bcee96d63bdc5"), a: 0 }
{ _id: ObjectId("629566123a5bcee96d63bdc6"), a: 1 }
{ _id: ObjectId("629566123a5bcee96d63bdc7"), a: 2 }
{ _id: ObjectId("629566123a5bcee96d63bdc8"), a: 3 }
{ _id: ObjectId("629566123a5bcee96d63bdc9"), a: 4 }
{ _id: ObjectId("629566123a5bcee96d63bdca"), a: 5 }
{ _id: ObjectId("629566123a5bcee96d63bdcb"), a: 6 }
{ _id: ObjectId("629566123a5bcee96d63bdcc"), a: 7 }
{ _id: ObjectId("629566123a5bcee96d63bdcd"), a: 8 }
{ _id: ObjectId("629566123a5bcee96d63bdce"), a: 9 }
{ _id: ObjectId("629566123a5bcee96d63bdcf"), a: 10 }
{ _id: ObjectId("629566123a5bcee96d63bdd0"), a: 11 }
{ _id: ObjectId("629566123a5bcee96d63bdd1"), a: 12 }
{ _id: ObjectId("629566123a5bcee96d63bdd2"), a: 13 }
{ _id: ObjectId("629566123a5bcee96d63bdd3"), a: 14 }
{ _id: ObjectId("629566123a5bcee96d63bdd4"), a: 15 }
{ _id: ObjectId("629566123a5bcee96d63bdd5"), a: 16 }
{ _id: ObjectId("629566123a5bcee96d63bdd6"), a: 17 }
{ _id: ObjectId("629566123a5bcee96d63bdd7"), a: 18 }
{ _id: ObjectId("629566123a5bcee96d63bdd8"), a: 19 }

커서(Cursor) 사용 단점

  • 커서를 생성하고 10분이 지나면 비활성화됨(타임아웃이 10분)
  • 시간 제한을 없애려면, option을 추가해야 한다.

0개의 댓글