http://greenfishblog.tistory.com/101  : 누군가 정리한 것.~

초보자를 위한 보안 Tip

기본 concept 정리

  • documents  : row에 해당하는 개념. MongoDB의 data handling 단위~ 고유의 key 값으로, “_id”를 갖는다. 소속된 collection 내에서 unique하다.
  • collection : table에 해당하는 개념, 단, schema가 없다.
  • database : collection을 모은 것, permission을 갖는다.  하나의 MongDB instance는 여러 개의 독립적인 database를 hosting할 수 있음.
  • JavaScript shell : MongoDB instance admin 용도, data manipuation 용도.

Documents

정의 : ordered set of key with value,
통상 언어별로, hash, map, dictionary라고 부르기도 함. (언어에 따라, 순서가 별로 의미가 없을 수도 있다.)

// 순서가 다르다는 건, relational DB로 따라지면, column이 바뀌는 결과가 되므로, 말 된다.

Key-Value set에서, Value가 다른 Document 통으로 잡힐 수도 있다.

Key는 String(UTF-8)이고, 중간에 ” 이 낄 수 없고, .  $ 는 특별한 용도로 의미가 있고, _로 시작하는 건, reserved이지만, strict하게 챙기진 않는다.  type-sensitive, case-sensitive.

Collections

schema 가 다르다고, collection을 구분하지는 않는다.

근데, collection이 왜 필요한가?

  • Collection이 여럿일 때,  구별은 Name으로. Name은 UTF-8.
    • “system.”으로 시작하는 이름은 reserved.
    • 단, “system.users” 는 가능함.
    • “system.namespaces”는 모든 collection에 대한 정보를 담고 있음.
  • Subcollections : . 을 붙여서 namespace를 쪼개는 것.
    • collection과 child 관계 아님. 그냥 organized하기 위한 것일 뿐.

Databases

이름 길이 : 64 byte 이하.
reserved database 명은 아래 3 가지
  • admin :  root database, user가 admin database에 소속되면, 모든 database에 대해, permission을 갖는다.  shut down이나, 모든 database 를 list하거나 이런 건, 이 permission을 갖는 애만.
  • local :  replication 불가. single server에 있어야 하는 것만 여기에 유지.
  • config : shard에 대한 정보를 두는 곳. shard setup을 잡거나, 변경하거나 할 때.
namespace는 실제로 100 byte정도의 길이를 가짐.
MongoDB shell : JavaScript 이고, 그 자체로서, stand-alone MongoDB client 역할
Collection 접근은 db.baz 와 같이 db 변수를 통해 이루어짐.  여기서 baz 는 현재 DB의 baz collection 임을 의미한다.
즉, db.”collecitonname”
  • db.blog.insert(xxx)     // object xxx를 선언한 후, ( javascript에서 object init하는 거랑 동일)  object  xxx 를 db에 넣음.
  • db.blog.find()                 // list all docs
  • db.blog.findOne()        // list one docs ( =  one row)
  • db.blog.update( { keyX, valueY},  xxx)        // xxx를 일단 바꾼 후, new value “xxx” 를  기준점 {keyX,  valueX} 에 반영함.
  • db.blog.delete( { keyX, valueY})      // {keyX,  valueX} 를 지움.
  • help                                     // shell의 help
  • db.help()                           // db의 help
  • db.foo.help()                   // collection의 help
  • db.foo.update                 //  update 함수의 prototype과 body 정의. 즉, source code를 보여줌. (in JavaScript)
  • db.version()                   //  MongoDB server의 version을 보여줌.  version 자체가 하나의 collection임. 함수처럼 보이지만, 그 자체로 table이다.
  • db.getCollection(“version”)  //  어느 collection인지 찾아줌. test.version 이라고 찍힘. “test”는 default database.
  • x.y                                                   // x[y] 와 동일하다.      .을 syntactic sugar라고 부른다.

Data Types

JavaScript shell에서는 오직 64 bit floating point number만 다룬다. shell상에서 그냥 integer랑 구분하는 syntax는 없다는 말.  32bit integer도 결국엔 64bit floating point로 바꿔서, 처리함.

key/value 에서, value로 사용가능한 것들

  • JavaScript function.  function() {  ….  }    // anonymous function
  • binary data도 value로 사용가능함. 임의의 길이의 “string”으로 간주함. 단, shell상에서 직접 manipulate 불가함.
  • array도 value로 가능함.   { “x” :  [1, 2, 3, …] }
  • 다른 document embedding { “x” :  { “y” :  “foo”  } }

Numbers

JavaScript 는 1 개의 number type을 가짐.

MongoDB는 3개의 number type을 가짐. (4 byte, 8 byte integer, 8 byte float)

Advertisements