在我的浏览器控制台中,我的 db.Collection.find(“CJiuk6jjFEBLDQrQc”)。fetch()返回一个带有对象的光标和一个数组称为 viewStatisticsArray 。
在下面找到返回光标的演示:
_id: "CJiuk6jjFEBLDQrQc"
DatePosted: Wed Feb 15 2017 15:10:50 GMT+0300 (EAT)
createdBy: "Mr. Walkings"
viewStatisticsArray: Array[2]
单击 viewStatisticsArray 时,会显示两个对象,其中包含两个元素: nrOfViews 和 statsDate 。
我感兴趣的是这些元素的价值。
我试过了
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 :(得分: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();