2010年10月8日 星期五

個人學習MongoDB後,對於document的認知

(MongoDB官方網站文件也有提到,但文件較分散)

  • A document is the basic unit of data for MongoDB, roughly equivalent to a row in a relational database management system (but much more expressive).
  • Similarly, a collection can be thought of as the schema-free equivalent of a table.
  • A single instance of MongoDB can host multiple independent databases, each of which can have its own collections and permissions.
  • MongoDB comes with a simple but powerful JavaScript shell, which is useful for the administration of MongoDB instances and data manipulation.
  • Every document has a special key, "_id", that is unique across the document’s collection.


collection很好理解但document就字面上有點難理解,但看完Java Driver運作方式後,對document我的認知如下:

MongoDB的document長像是JSON的格式,document在RDBMS上如同是一個row。 


{
    "name" : "MongoDB",
    "type" : "database",
    "count" : 1,
    "info" : { x : 203, y : 102 }
}



在mongoDB java Driver使用上要寫入如上JSON格式資料的語法如下:


//建立最外層key:value,此時還不是完整的parent document
BasicDBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
doc.put("type", "database"); doc.put("count", 1);

//建立info的sub document
BasicDBObject info = new BasicDBObject();
 info.put("x", 203);
 info.put("y", 102);

//將sub document寫入doc使其成為完整的parent document.
doc.put("info", info);

//將這個完整的parent document插入到collection,這個collection類似RDBMS的table.
coll.insert(doc);

由程式邏輯來理解
我認為由最外層來看這個結構是一個parent document
 {
    "name" : "MongoDB",
    "type" : "database",
    "count" : 1,
    "info" : { x : 203, y : 102 }
 }


//而info的value也是一個document,就是parent document裡再包含了一個sub document.

 { x : 203, y : 102 }



因此整個JSON格式就可以看成是RDBMS裡的一個row,對於想從mongoDB拿資料的程式來說這一個最外層就是一個document,而對於mongoDB自己內部來說內層那個info也是一個document。

從程式邏輯來看能理解MongoDB的資料結構了,但我無法很明白的來敘述這種關係,並且理解也可能有誤解,不過當由程式直接操作來看,document到底是什麼就變得不是那麼重要,有點張無忌學太極拳、劍,最後無招勝有招。