使用聚合来合并两个字段

时间:2019-08-23 04:56:02

标签: node.js mongodb mongoose

我有此数据

{
  "FirstName": null,
  "LastName": "natra",
  "Gender": null,
  "IsActive": true,
},
{
  "FirstName": "abiy",
  "LastName": "jagema",
  "Gender": "Female",
  "IsActive": true,
},

我想要的是获取这样的数据

{
  "FullName": "abiy Jagema",
  "Gender": "Female",
  "IsActive": true,
},
{
  "FullName": Natra,
  "Gender": null,
  "IsActive": true,
},

因此,如果名字和姓氏都存在,则只需使用聚合将姓氏设置为全名,我会这样尝试,但是如果缺少名字,则会在全名上放置空值

User.aggregate([
  { $match: { IsActive: true } },
  {
    $project: {
      Gender: 1,
      IsActive: 1,
      FullName: {
        $cond: {
          if: "$LastName",
          then: { $concat: ["$FirstName", " ", "$LastName"] },
          else: "$FirstName"
        }
      }
    }
  }
]);

4 个答案:

答案 0 :(得分:1)

条件中少有modification

User.aggregate([
  { $match: { IsActive: true } },
  {
    $project: {
      Gender: 1,
      IsActive: 1,
      FullName: {
        $cond: {
          if: { $eq: [ "$FirstName", null ] },
          then: "$LastName", 
          else: { $concat: [ "$FirstName", " ", "$LastName" ] } }
        }
      }
    }
  }
]);

答案 1 :(得分:0)

首先,检查firstName是否为null(如果为null则将其设置为“”),否则将“”附加到firstName并将其连接到lastName

User.aggregate([
  {
    $match: {
      IsActive: true
    }
  },
  {
    $project: {
      Gender: 1,
      IsActive: 1,
      FirstName: {
        $cond: {
          if: {
            $eq: [
              "$FirstName",
              null
            ]
          },
          then: "",
          else: {
            $concat: [
              "$FirstName",
              " "
            ]
          }
        }
      },
      LastName: {
        $cond: {
          if: {
            $eq: [
              "$LastName",
              null
            ]
          },
          then: "",
          else: "$LastName"
        }
      }
    }
  },
  {
    $project: {
      Gender: 1,
      IsActive: 1,
      FullName: {
        $concat: [
          "$FirstName",
          "$LastName"
        ]
      }
    }
  }
])

答案 2 :(得分:0)

User.aggregate([
  { $match: { IsActive: true } },
  {
    $project: {
      Gender: 1,
      IsActive: 1,
      FullName: {
      $concat: [
      {
        $ifNull: [
          "$FirstName",
          ""
        ]
      },
      " ",
      {
        $ifNull: [
          "$LastName",
          ""
        ]
      }
     ]
    }
   }
  }
]);

答案 3 :(得分:0)

这对我有用:

db.aggtest.aggregate([ { $match: { IsActive: true } }, 
{ $project: { "_id": 0, "Gender": 1, "IsActive": 1, "FullName": { $concat: [ { $ifNull: [ "$FirstName", "" ] }, " ", 
{ $ifNull: [ "$LastName", "" ]} ]} }} ])