如何制定查询以返回对象中内部数组的元素?

时间:2017-03-08 11:58:27

标签: javascript arrays meteor

在我的浏览器控制台中,我的 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 数组的内部元素返回游标?

期待您的帮助。

1 个答案:

答案 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();