【问题标题】:Which Aggregate function in mongoDB should I use?我应该使用 mongoDB 中的哪个聚合函数?
【发布时间】:2021-09-02 22:39:25
【问题描述】:

我的收藏如下:

{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962700",
    "Result": "NotEnrolled",
    "enrollDate": "4/21/2021",
    "Name": "THOMAS Edison",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
} 
{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962700",
    "Result": "NotEnrolled",
    "enrollDate": "5/21/2021",
    "Name": "THOMAS Edison",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
}
{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962700",
    "Result": "NotEnrolled",
    "enrollDate": "5/21/2021",
    "Name": "THOMAS Edison",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
}

{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962701",
    "Result": "Enrolled",
    "enrollDate": "4/21/2021",
    "Name": "Jim Miller",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
} 
{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962701",
    "Result": "Enrolled",
    "enrollDate": "5/21/2021",
    "Name": "Jim Miller",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
}
{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962701",
    "Result": "Enrolled",
    "enrollDate": "5/21/2021",
    "Name": "Jim Miller",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
}

现在错误地将 20 条具有相同日期 ('5/21/2021') 的相同 empID 记录插入数据库中。我只想在数据库中保留该日期和员工的 1 条记录,并删除其余 19 条记录。 这意味着对于empID,我只想保留"enrollDate":"4/21/2021" 的记录和"enrollDate":"5/21/2021" 的1 条记录,并删除"enrollDate":"5/21/2021" 的重复记录。相同的 "empId":"101962701".

如何在 Mongodb 中形成删除查询?

预期输出

{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962700",
    "Result": "NotEnrolled",
    "enrollDate": "4/21/2021",
    "Name": "THOMAS Edison",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
} 
{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962700",
    "Result": "NotEnrolled",
    "enrollDate": "5/21/2021",
    "Name": "THOMAS Edison",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
}

{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962701",
    "Result": "Enrolled",
    "enrollDate": "4/21/2021",
    "Name": "Jim Miller",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
} 

{
    "_id": {
        "$oid": "6100b7c226aa5c7c0bb665e1"
    },
    "empId": "101962701",
    "Result": "Enrolled",
    "enrollDate": "5/21/2021",
    "Name": "Jim Miller",
    "Flag": "NEGATIVE",
    "createdDateTime": {
        "$date": "2021-06-30T06:00:00.000Z"
    }
}

我想删除重复的 empIdenrollDate

【问题讨论】:

  • 尝试更好地格式化你的数据,试试this之类的东西,也把你的数据放在代码块中

标签: mongodb nosql delete-record


【解决方案1】:

会是这个:

db.collection.aggregate([
  {
    $group: {
      _id: { empId: "$empId", enrollDate: "$enrollDate" },
      data: { $first: "$$ROOT" }
    }
  },
  { $replaceRoot: { newRoot: "$data" } }
])

Mongo playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-22
    • 2018-05-15
    • 2019-01-02
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多