【问题标题】:Join array elements using MongoDB aggregation framework使用 MongoDB 聚合框架连接数组元素
【发布时间】:2017-11-19 07:40:08
【问题描述】:

我有一个 MongoDB 返回的数据数组。我想知道如何使用 mongodb 聚合框架从下面的数组中加入名字和姓氏。

我看过几个与我的查询类似的帖子,但是我不明白答案,因此我发布了一个新问题。

我已经编写了一个示例代码。任何帮助纠正我的代码将不胜感激

var playersData = [
    {
        firstName: 'David',
        LastName: 'John',
        country: 'India'
    },
    {
        firstName: 'Chris',
        LastName: 'Jericho',
        country: 'USA'
    },
    {
        firstName: 'John',
        LastName: 'Cena',
        country: 'USA'
    }
];

代码

playerModel.aggregate([
        {
            "$match": {
               [{ "country": 'USA' }]
            }
        },
        {
            "$project": {
                "_id": 0, "playersData.firstName": 1, "playersData.lastName": 1, 
                fullName: {
                    $reduce: {
                        input: '$playersData',
                        initialValue: '',
                        in: {
                            $concat: ["$$value", "$$this"]
                        }
                    }
                }   

            }
        }

    ], function (err, result) {

    })

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    您可以尝试以下聚合。

    $match 保留玩家数组,其中至少有一个国家是 USA,后跟 $filter 过滤国家为 USA 的元素,$map$concat 加入名字和姓氏以产生全名数组。

    playerModel.aggregate([
      {
        "$match": {
          "playersData.country": "USA"
        }
      },
      {
        "$project": {
          "_id": 0,
          "playersData.firstName": 1,
          "playersData.lastName": 1,
          "fullname": {
            "$map": {
              "input": {
                "$filter": {
                  "input": "$playersData",
                  "as": "playerf",
                  "cond": {
                    "$eq": [
                      "$$playerf.country", "USA"
                    ]
                  }
                }
              },
              "as": "playerm",
              "in": {
                "$concat": [
                  "$$playerm.firstName",
                  ",",
                  "$$playerm.lastName"
                ]
              }
            }
          }
        }
      }
    ])
    

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 2012-08-23
      • 2012-10-25
      • 2013-07-31
      • 2013-07-20
      • 1970-01-01
      • 2017-04-24
      • 2020-04-08
      • 1970-01-01
      相关资源
      最近更新 更多