2014-02-25 34 views
-3

AM通過遍歷從MongoDB的文檔的AJAX。獲得元素重建一個ArrayObject的..Javascript - 從循環播放mongodb文檔重建數組對象?

的ArrayObject的幾乎是正確的,但它缺少所述陣列中的文檔之間逗號分開。

看來這就是爲什麼console.log(arrayObject[0].name);undefined

但嘗試的if/else語句,以排除在開始前一個逗號,跳過if

function reBuild(returnValue) 
{ 
    var docs = returnValue; 
    var returnedVal = []; 
    for (var i=0, length=docs.length; i < length; i++){ 

    if (returnedVal === []) 
    { 
     returnedVal.push('{' + 'title: "' + docs[i].title + '", quantity: ' + docs[i].quantity + ', _id: "' + docs[i]._id + '"}'); 
    } 
    else 
    { 
     returnedVal.push(', {' + 'title: "' + docs[i].title + '", quantity: ' + docs[i].quantity + ', _id: "' + docs[i]._id + '"}'); 
    } 

    console.log(returnedVal[i]); 

    } 
    console.log(returnedVal[0].title); 
} 

的console.log(returnedVal [一世]);

[15:20:02.946] "{title: "Sample1", value: 2, _id: "530c12c66e6b0de318000001"}" 
[15:20:02.946] ", {title: "Sample2", value: 4, _id: "530c12cc6e6b0de318000002"}" 
通過不用彷徨

的MongoDB:

function getAll(res) { 

    db.collection('demo').find().sort({ value: 1 }).toArray(function (err, docs) { 
     console.log("Got the Docs: " + utils.inspect(docs)); 

     // each doc looks like: { _id: ObjectID, title: 'string', quantity: int} 

     res.json({docs: docs}); 

    }); 
} 

文件看起來像這樣在終端控制檯:

[ { _id: 530c12c66e6b0de318000001, 
    title: 'Sample1', 
    quantity: 2 }, 
    { title: 'Sample2', 
    quantity: 4, 
    _id: 530c12cc6e6b0de318000002 } ] 

正在找。獲得的MongoDB文檔的arrayObject,建立var從arrayObject使用object.foo,然後重新構建一個arrayObject的所有foobar,一旦排名..

有另一個函數可以處理排序的一些變量計算。

+0

我們不需要管理數組 - 「returnedVal.push(','只是'.push(..'很好,刪除那個逗號,一切都會好起來的 –

+0

爲什麼你要手工製作(無效)爲什麼不創建一個對象字面量的數組,然後'JSON.stringify'(和/或'.join()')它? –

+0

所以,請擴展您使用的代碼,例如提供和示例的'returnValue'的數據,我們將看到發生了什麼 –

回答

0

作爲更新

鑑於returnValue(如你的例子)

[ 
    { _id: 530c12c66e6b0de318000001,title:'Sample1', quantity: 2 }, 
    { _id: 530c12cc6e6b0de318000002, title:'Sample2', quantity:4} 
] 

傳遞給你的reBuild()功能reBuild(returnValue)

'的數據重建()' 是函數重新創建'returnValue'格式到另一個數組中:

你舉的例子..

returnedVal.push(', {' + 'title: "' ... 

......有許多問題, - 領先的逗號被髮送到push方法和報價的關閉和unclosing創建的字符串或窗體定製的json

讓我們簡化功能

function reBuild(arr) { 

var returnedVal = []; 
for (var i=0, len=returnValue.length; i < len; ++i){ 
    var newval = {_id:arr[i]._id,title:arr[i].title,quantity:arr.arr[i].quantity}; 
    returnedVal.push(newvalue); 
} 

console.log(returnedVal); 
return (returnedVal); 

} 

它有效,但是我們做了什麼? - 絕對沒有。我們所做的只是採取一個數組returnedVal(我縮寫爲arr爲例)並重建它完全一樣。

讓我們看看AJAX數據請求,你給

db.collection('demo').find().sort({ value: 1 }).toArray(function (err, docs) { 
    console.log("Got the Docs: " + utils.inspect(docs)); 
    res.json({docs: docs}); 

}); 

我想我們缺少在重建部分()函數的掛鉤呢?

看着它 - 的res.json({docs: docs});部分(與數據作爲JSON響應函數),將這種正確的流程?..

db.collection('demo').find().sort({ value: 1 }).toArray(function (err, docs) { 

    /* pass and rebuild the data array before you 'json' it */ 
    var rebuiltDocs = reBuild(docs); 
    res.json({docs: rebuiltDocs}); 

}); 

我曾在某一些東西在這裏猜到你的應用正在做什麼。但關鍵部分是理解,一旦你看到你的javascript對象的字符串表示形式。

如果您需要JSON通過http傳輸數據(主要原因),那麼在對數據進行「jsonify」之前先對數據執行例程。

要unJSON數據使用JSON.parse(docs)

  • 對於數據您的應用程序內(如果到達的JSON)使用 JSON.parse()
  • 在系統之間傳輸數據使用JSON.stringify()

我不覺得我在這裏有所幫助,但是希望能夠通過某種方式來解釋如何以及爲什麼您可能會覺得有必要對這些陣列進行修改。

+0

完美。真的很多,非常感謝 – StackThis

+0

哦,那真是太幸運了:)哪位有幫助? –

+0

簡化了這個功能的奇蹟。並且通過節點傳遞數據數組也是非常棒的..不管出於什麼原因,包含函數調用對ajax來說都會有些奇怪。 .get似乎保持打開狀態,因此'btn.click'上的'$('#retrieve')。html(html);'不會替換html,它會添加到它! 'GET http:// localhost:9999/[HTTP/1.1 200 OK 10ms]'不會爲每次點擊調用,更多divs日誌 – StackThis