Node.js & MongoDB

컬렉션 관리

데이터베이스의 컬렉션 목록을 출력

다음 명령은 test 데이터베이스의 컬렉션 목록을 출력한다.

use test
show collections

컬렉션 생성

몽고DB 데이터베이스에 문서를 저장하기 전에 반드시 컬렉션을 생성해야 한다. 컬렉션을 생성하려면, 데이터베이스 핸들에서 createCollection(name, [options])를 호출해야 한다. name 파라미터는 새 컬렉션의 이름이다. options 파라미터는 다음 프로퍼티들을 가질 수 있다.

  • capped, autoIndexID, size, max

다음 코드는 newCollection이라고 하는 새 컬렉션을 testDB라는 데이터베이스에 생성한다.

use testDB
db.createCollection("newCollection", {capped:false})

컬렉션 삭제

컬렉션을 삭제하려면, 적절한 데이터베이스로 전환하고 컬렉션 객체를 얻은 다음, 해당 객체에 대해 drop() 함수를 호출해야 한다.

다음 코드는 testDB 데이터베이스로부터 newCollection 컬렉션을 삭제한다.

use testDB
show collections
col1 = db.getCollection("newCollection")
col1.drop()
show collections

컬렉션에서 문서를 검색

몽고DB 셸은 collection 객체에 대해 find(query) 메소드를 사용해서 컬렉션에서 문서를 찾을 수 있는 모든 질의 기능을 제공한다. query 파라미터는 컬렉션안에서 문서와 비교하기 위해 필드와 값이 있는 질의 문서를 명시한다. query 파라미터 없이 find() 메소드를 사용하면 컬렉션 안의 모든 문서를 반환한다.

다음 코드는 먼저 컬렉션 내의 모든 항목을 질의한 후, speed 필드가 120mph와 동일한 문서를 가져온다.

use testDB
col1 = db.getCollection("newCollection")
col1.find()
col1.find({speed: "120mph"})

컬렉션에 문서를 추가

일반적으로 Node.js 애플리케이션을 통해 컬렉션에 문서를 삽입하지만 테스트할 목적으로 문서를 직접 삽입해야 하는 경우가 있다.

컬렉션에 문서를 추가하려면, collection 객체를 얻은 다음 해당 객체에 대해 insert(document) 또는 save(document) 메소드를 호출해야 한다. document 파라미터는 BSON으로 변환돼 컬렉션에 저장된 형식화된 자바스크립트 객체다.

다음 코드는 컬렉션 내부에 세 개의 새 문서를 생성한다.

use testDB
col1 = db.getCollection("newCollection")
col1.find()
col1.insert({ vehicle: "plane", speed: "480mph" })
col1.insert({ vehicle: "car", speed: "120mph" })
col1.insert({ vehicle: "train", speed: "120mph" })
col1.find()

컬렉션으로부터 문서를 삭제

일반적으로 Node.js 애플리케이션을 통해 컬렉션으로부터 문서를 삭제하지만 테스트할 목적으로 문서를 직접 삭제해야 하는 경우가 있다.

컬렉션에서 문서를 삭제하려면, collection 객체를 얻은 다음 해당 객체에 대해 remove(document) 메서드를 호출해야 한다. 선택사항인 query 파라미터는 컬렉션 안에서 문서와 비교하기 위해 필드와 값이 있는 질의 문서를 명시한다. 질의 내용과 일치하는 문서는 컬렉션에서 삭제된다.

다음 코드는 vehicle이 plane인 문서를 먼저 삭제한 다음, 컬렉션의 모든 문서를 삭제한다.

use testDB
col1 = db.getCollection("newCollection")
col1.find()
col1.remove({vehicle: "plane"})
col1.find()
col1.remove()
col1.find()

컬렉션의 문서를 갱신

일반적으로 Node.js 애플리케이션을 통해 컬렉션으로부터 문서를 갱신하지만 테스트할 목적으로 문서를 직접 갱신해야 하는 경우가 있다.

컬렉션의 문서를 갱신하려면, 컬렉션을 얻어야 한다. 그런 후에 save(object) 메소드를 이용해서 객체에서 변경해야 하는 내용을 저장할 수 있다. 또는 update(query, update, options) 메소드를 사용해서 컬렉션의 문서를 질의한 다음, 해당 문서를 찾으면 갱신할 수 있다.

update 파라미터는 갱신할 때 사용하기 위한 갱신 연산자를 명시하는 객체다. 예를 들면, $inc는 필드의 값을 증가시키고, $set은 필드의 값을 설정한다. 또한 $push는 요소를 배열에 추가한다. 다음 갱신 객체는 하나의 필드를 증가시키고, 또 다른 필드의 값을 설정하며, 세번째 필드의 이름을 변경한다.

{ $inc: {count:1}, $set: {name: "New Name"}, $rename: {"nickname": "alias"} }

update()의 options 파라미터는 둘 다 Boolean 값이 multiupsert라는 두 개의 프로퍼티를 갖는 객체다. upsert가 true라면, 문서를 찾을 수 없는 경우 새로운 문서가 생성된다. multi가 true라면, 질의와 일치하는 모든 문서를 갱신한다. 그렇지 않은 경우에는 첫번째 문서만 갱신된다.

다음 코드는 문서에서 120mph인 speed를 150으로 설정하고, updated라는 새로운 필드를 추가한다. 또한, plane 문서의 변경 항목을 저장하기 위해 save() 메소드를 사용한다.

use testDB
col1 = db.getCollection("newCollection")
col1.find()
col1.update(
    {speed: "120mph"},
    {$set: {speed: "150mph", updated: true}},
    {upsert: false, multi: true}
)
col1.save({"_id": ObjectId("52a0caf3312.....ddb"),
           "vehicle": "plane", "speed": "500mph"})
col1.find()