2017-03-08 34 views
0

在我的瀏覽器控制檯中,我的db.Collection.find( 「CJiuk6jjFEBLDQrQc」)。取()返回與對象光標,以及陣列稱爲viewStatisticsArray如何制定查詢以返回對象中的內部數組的元素?

查找返回的光標的一個示範以下:

_id: "CJiuk6jjFEBLDQrQc" 
DatePosted: Wed Feb 15 2017 15:10:50 GMT+0300 (EAT) 
createdBy: "Mr. Walkings" 
viewStatisticsArray: Array[2] 

viewStatisticsArray被點擊它示出了兩個對象兩個元素:nrOfViewsstatsDate

這是我感興趣的這些元素的價值。

我試圖

db.Collection.find({"CJiuk6jjFEBLDQrQc"}).fetch().map(function(u) { 
    console.log("Array: " + u.viewStatisticsArray); // Array: [object Object],[object Object] 
    console.log("Number of Viewers: " + .viewStatisticsArray.nrOfViews); // Number of Viewers: undefined 
    console.log("Stats Date: " + u.viewStatisticsArray.statsDate); // Stats Date: undefined  

return u.viewStatisticsArray 
}); 

奇怪的是return u.viewStatisticsArray返回陣列[2]

如何制定一個查詢,以返回遊標與內元素viewStatisticsArray陣列?

期待您的幫助。

+0

你能提供一個樣本需要的返回值嗎 – collision

+0

@collision當然可以!我希望返回值是一個對象(在瀏覽器控制檯中),點擊它應該擴展到這個 nrOfViews:3126 statsDate:「Wed Mar 08 2017 13:17:44 GMT + 0300(EAT)」 – SirBT

+0

@collision如果你看@我的第一篇文章,u.viewStatisticsArray.nrOfViews應該產生:3126,而u.viewStatisticsArray.statsDate應該產生:Wed Feb 15 2017 15:10:50 GMT + 0300(EAT)而不是像當前那樣未定義。 – SirBT

回答

0

您遇到問題的原因是因爲您試圖訪問viewStatisticsArray的每個索引,就好像它是一個對象。

u.viewStatisticsArray.statsDate 

但是,viewStatisticsArray是包含2個對象的數組。所以如果你想獲得這些值,你必須像這樣迭代數組。

db.Collection.find({"CJiuk6jjFEBLDQrQc"}).fetch().map(function(u) { 
    console.log("Array: " + u.viewStatisticsArray); // Array: [object Object],[object Object] 

    u.viewStatisticsArray.forEach(function(e, i) { 
    console.log("Number of Viewers - index " + i ": " + e.nrOfViews); 
    console.log("Stats Date - index " + i ": " + e.statsDate); 
    }); 
}); 

由於您的文檔字段是一個數組,因此無法用mongodb遊標遍歷數組中的元素。一個mongodb遊標僅迭代集合中的文檔。只需使用普通的javascript來迭代一個數組文檔中的字段(如上所示)。

最後,聽起來好像即使viewStatisticsArray是基於你的問題的對象數組,它聽起來像你可能只關心數組中的最後一個索引(這可能是最新的日期視圖計數計算) 。在這種情況下,你可以做這樣的事情來獲得單個對象。

var latestStats = db.Collection.find({"CJiuk6jjFEBLDQrQc"}).fetch().pop().viewStatisticsArray.pop(); 
相關問題