首页 > 解决方案 > 如何根据少数组合获得 MONGO 文档,而这些组合不止一次

问题描述

如何根据在以下文档中具有多次以上的几种组合来获取 mongo 文档,我需要组合"Location", "Company", "start","end"仅用于“Id”:“Q1D3”具有这种组合不止一次,但INT_ID会有所不同

{
    "Id" : "Q1D3",
    "INT_ID" : "1234",
    "Location" : "ENG",
    "Company" : "COMP1",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D3",
    "INT_ID" : "1235",
    "Location" : "ENG",
    "Company" : "COMP1",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D3",
    "INT_ID" : "1236",
    "Location" : "USA",
    "Company" : "COMP3",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D3",
    "INT_ID" : "1237",
    "Location" : "USA",
    "Company" : "COMP3",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D5",
    "INT_ID" : "1237",
    "Location" : "ENG",
    "Company" : "COMP1",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D5",
    "INT_ID" : "1239",
    "Location" : "ENG",
    "Company" : "COMP1",
    "start" : 20191001,
    "end" : 20230930
}


{
    "Id" : "Q1D3",
    "INT_ID" : "1237",
    "Location" : "CAN",
    "Company" : "COMP1",
    "start" : 20191001,
    "end" : 20230930
}

从上面的示例中,我只需要查询即可获取文档

{
    "Id" : "Q1D3",
    "INT_ID" : "1234",
    "Location" : "ENG",
    "Company" : "COMP1",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D3",
    "INT_ID" : "1235",
    "Location" : "ENG",
    "Company" : "COMP1",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D3",
    "INT_ID" : "1236",
    "Location" : "USA",
    "Company" : "COMP3",
    "start" : 20191001,
    "end" : 20230930
}

{
    "Id" : "Q1D3",
    "INT_ID" : "1237",
    "Location" : "USA",
    "Company" : "COMP3",
    "start" : 20191001,
    "end" : 20230930
}

有人可以帮我吗

标签: mongodbmongodb-query

解决方案


  • $match你的情况
  • $groupby Location, Company, startand endfields 并在其中创建文档数组doc
  • $unwind解构doc数组
  • $group byINT_ID和 firstdoc
  • $replaceRootdoc对象替换为根
db.collection.aggregate([
  { $match: { Id: "Q1D3" } },
  {
    $group: {
      _id: {
        Location: "$Location",
        Company: "$Company",
        start: "$start",
        end: "$end"
      },
      doc: { $push: "$$ROOT" }
    }
  },
  { $unwind: "$doc" },
  {
    $group: {
      _id: "$doc.INT_ID",
      doc: { $first: "$doc" }
    }
  },
  { $replaceRoot: { newRoot: "$doc" } }
])

操场


推荐阅读