【问题标题】:MongoDB $push operator and count characters in a nameMongoDB $push 运算符并计算名称中的字符
【发布时间】:2021-04-22 01:01:35
【问题描述】:

我在 Mongodb 中使用名为 people 的集合中的以下数据填充了一个数据库。

{ "_id" : 0, "name" : "Bernice Pope", "age" : 69, "date" : "2017-10-04T18:35:44.011Z" }

{ "_id" : 1, "name" : "Eric Malone", "age" : 57, "date" : "2017-10-04T18:35:44.014Z" }

{ "_id" : 2, "name" : "Blanche Miller", "age" : 35, "date" : "2017-10-4T18:35:44.015Z" }

{ "_id" : 3, "name" : "Sue Perez", "age" : 64, "date" : "2017-10-04T18:35:44.016Z" }

{ "_id" : 4, "name" : "Ryan White", "age" : 39, "date" : "2017-10-04T18:35:44.019Z"}

{ "_id" : 5, "name" : "Grace Payne", "age" : 56, "date" : "2017-10-04T18:35:44.020Z" }

{ "_id" : 6, "name" : "Jessie Yates", "age" : 53, "date" : "2017-10-04T18:35:44.020Z"}

{ "_id" : 7, "name" : "Herbert Mason", "age" : 37, "date" : "2017-10-4T18:35:44.020Z" }

{ "_id" : 8, "name" : "Jesse Jordan", "age" : 47, "date" : "2017-10-04T18:35:44.020Z"}

{ "_id" : 9, "name" : "Hulda Fuller", "age" : 25, "date" : "2017-10-04T18:35:44.020Z"}

基于人员集合,我需要创建一个名为 PeopleNames 的视图,如下所示:

{ "LengthOfName": 8, "names" : [ "Sue Perez" ]}

{ "LengthOfName" : 9, "names" : [ "Ryan White" ]}

{ "LengthOfName" : 10, "names" : [ "Eric Malone", "Grace Payne" ]}

{ "LengthOfName" : 11, "names" : [ "Bernice Pope", "Jessie Yates", "Jesse Jordan", "Hulda Fuller" ]}

{ "LengthOfName" : 12, "names" : [ "Herbert Mason" ]}

{ "LengthOfName" : 13, "names" : [ "Blanche Miller"]}

LengthOfName 是姓氏和名字中的字符总数。 我的做法是先将名字添加到数组中,使用$split操作符拆分名字,使用$strLenCP计算字符数。

db.people.aggregate([
    {
    $project : {
        name : 1,
        name_array : [{$push : { $split : {$name : " "}}}] 
    }
}

,{
    
    $unwind : "$name_array"
},{
    $project : {
        name : 1,
        nameLength : {$strLenCP : $name_array}
    }
},{
    $group :{
        _id : "$nameLength",
        nameLength: 1
        
    }
}])

但我收到错误消息说我的"$name_array" is undefined 有什么想法吗?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    $push 聚合运算符仅在 $group 阶段可用。

    您可以按名称长度对文档进行分组(使用$replaceAll 修剪名称中的空格后)并使用$push 将名称添加到names 数组中。然后您可以添加一个$project 阶段以将LengthOfName 字段添加到文档中,最后添加一个$sort 阶段以按LengthOfName 字段对文档进行排序。

    db.collection.aggregate([
      {
        $group: {
          _id: {
            $strLenCP: {
              $replaceAll: {
                input: "$name",
                find: " ",
                replacement: ""
              }
            }
          },
          names: {
            $push: "$name"
          }
        }
      },
      {
        $project: {
          _id: 0,
          LengthOfName: "$_id",
          names: "$names",
        }
      },
      {
        $sort: {
          LengthOfName: 1,
        }
      }
    ])
    

    MongoPlayground

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 2012-01-30
      • 1970-01-01
      相关资源
      最近更新 更多