上一篇我們把從MongoDB讀取的Object類型拆解成獨立的變數,我們再來看看那段程式是怎樣實現的。
以下是我們的程式:
router.get('/userlist', function(req, res) {
var db = req.db;
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
var objKey = Object.keys(docs);
objKey.forEach(function(objectid){
var items = Object.keys(docs[objectid]);
items.forEach(function(itemkey) {
var itemvalue =docs[objectid][itemkey];
console.log(objectid+': '+itemkey+' = '+itemvalue);
})
})
res.render('userlist', {
"userlist" : doc
});
});
});
首先看"Object.keys(docs)"這個函數,它的作用是取得Object的編號。每一個完整的Obeject有一個編號,這樣我們就知道一共有幾個Objects,並透過編號來對相應的Object進行操作。
由於Object.keys()回傳的是陣列(array),我們可以用objKey.forEach()來對每一個項目(這裡就是每一個Object)作進一步處理。objKey.forEach()裡面放的callback function即是對每一個項目都執行一次,其中的objectid就是objKey裡保存的每一個Object的編號(取自Object.Keys())。這裡是第一層(forEach),我們可以叫它Object層,意思是對Objects進行forEach。
Object層下面是key層,是對Object裡面的key進行forEach。Object裡面的key就是:_id, username, email這三個key。"Object.keys(docs[objectid])"的功能就是取得key層,接著對key層進行forEach,目的是要取得每一個key所相對應的值(value)。
"var itemvalue =docs[objectid][itemkey];"這一行便是要取得每一個key的value。
最後我們得到三個變數:
objectid: 每一個Object的ID
itemkey: 每一個Object底下的key
itemvalue: 每一個key所對應的值
這樣我們已取得Object裡的所有資料。
(本文同步發表於: NodeJust.com )