MongoDB:获取具有两个值的不同组合的最新文档 [英] MongoDB: Get newest documents with distinct combination of two values

查看:37
本文介绍了MongoDB:获取具有两个值的不同组合的最新文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我有一个问题,如何对数据库形成一个稍微复杂一点的特定查询。 我有一个包含类似以下内容的文档的集合:

[{
  "_id": { "$oid" : "Object1" },
  "created": { "$date" : "2021-11-14T10:58:01.456Z" },
  "primaryId": "SomeId1",
  "secondaryIdx": 0,
  "otherData" : something
}
{
  "_id": { "$oid" : "Object2" },
  "created": { "$date" : "2021-11-13T10:58:01.456Z" },
  "primaryId": "SomeId2",
  "secondaryIdx": 0,
  "otherData" : something
}
{
  "_id": { "$oid" : "Object3" },
  "created": { "$date" : "2021-11-15T10:58:01.456Z" },
  "primaryId": "SomeId2",
  "secondaryIdx": 1,
  "otherData" : something
}
{
  "_id": { "$oid" : "Object4" },
  "created": { "$date" : "2021-11-16T10:58:01.456Z" },
  "primaryId": "SomeId1",
  "secondaryIdx": 0,
  "otherData" : something
}]

并且我得到的集合应该只包含具有PrimiyID+Second DaryIdx唯一组合的文档。只要有多个文档具有此组合,我就只想获取最新的文档。 因此,我的结果应该如下所示:

{
  "_id": { "$oid" : "Object2" },
  "created": { "$date" : "2021-11-13T10:58:01.456Z" },
  "primaryId": "SomeId2",
  "secondaryIdx": 0,
  "otherData" : something
}
{
  "_id": { "$oid" : "Object3" },
  "created": { "$date" : "2021-11-15T10:58:01.456Z" },
  "primaryId": "SomeId2",
  "secondaryIdx": 1,
  "otherData" : something
}
{
  "_id": { "$oid" : "Object4" },
  "created": { "$date" : "2021-11-16T10:58:01.456Z" },
  "primaryId": "SomeId1",
  "secondaryIdx": 0,
  "otherData" : something
}]

因此,将从结果中排除对象1,因为PrimiyID+Second Idx重复,并且对象4较新。

我目前在我的应用程序中实现了这一点,但我认为最好是在查询级别这样做,这样我的应用程序就不必加载不必要的大集合,然后可能必须立即过滤掉其中的一大部分。

推荐答案

您可以先$sortprimaryId: 1, secondaryIdx: 1, created: -1。然后按primaryId + secondaryIdx执行$group,然后获取第一个文档。

db.collection.aggregate([
  {
    $sort: {
      primaryId: 1,
      secondaryIdx: 1,
      created: -1
    }
  },
  {
    $group: {
      _id: {
        primaryId: "$primaryId",
        secondaryIdx: "$secondaryIdx"
      },
      lastDoc: {
        $first: "$$ROOT"
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": "$lastDoc"
    }
  }
])

这是Mongo playground供您参考。

这篇关于MongoDB:获取具有两个值的不同组合的最新文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆