首页 > 解决方案 > 对存储在变量中的 mongo 查询执行 2 个单独的 .map 操作

问题描述

我将此查询存储在一个变量中,如下所示

var recent_Polls = db.Trump_Vs_Biden_V1.aggregate(
  [
    { $match : {"State":state_Val}},
    {$sort:{"Date":-1}},
    {$limit: 5 }
  ]
)

它返回这 5 个文件

返回文件的链接

正如您在每个文档中看到的那样

“拜登”:59,“特朗普”:32

我希望将所有拜登值放入一个数组中,将所有王牌值放入一个单独的数组中,以便我可以对它们执行数学运算。

因此,例如,这是我想要的所有王牌值的期望输出..

[
36,
32,
32,
31,
36
 ]

反之亦然...

为了做到这一点,我尝试使用 .map 函数。

var trump_Nums = recent_Polls.map(function(e2){return e2.Trump})

这有效,但是当我尝试对拜登值执行完全相同的操作时

recent_Polls.map(function(e2){return e2.Biden})

我得到一个空数组作为回报..

我想知道是否有人能想到解决这个问题的方法,我可以一次将王牌和拜登值全部检索到 2 个单独的数组中。那可能更有效..

标签: arraysmongodbaggregation-framework

解决方案


要在客户端获得此功能,您可以尝试 forEach:

var trump_Nums = [];
var biden_Nums = [];
recent_Polls.forEach(function(e2){
                          trump_Nums.push(e2.Trump);
                          biden_Nums.push(e2.Biden)
});

要从服务器获取此信息,请将 $group 阶段添加到聚合中:

{$group: {
          _id:null,
          Biden:{$push: "$Biden"},
          Trump:{$push: "$Trump"}
}}

操场

如果您在需要数字的同时需要完整的文档,请在原始聚合中添加一个 $facet 阶段:

{$facet: {
          documents:[{$match:{}}],
          numbers: [{$group: {
                              _id:null,
                              Biden:{$push: "$Biden"},
                              Trump:{$push: "$Trump"}
          }}]    
}}

操场


推荐阅读