MongoDB: 获取所有最新修订的条目

MongoDB: get all entries with most recent revision

我正在尝试查询预建的 MongoDB,它为每个条目保留修订信息。数据的示例如下:

{
  "_id": ObjectId("5cd48bad15447900012fae00"),
  "sku": "abc123",
  "_revision": 5
  "_created": ISODate("2019-05-10T15:00:00.000Z"),
  "provider": "MySupplier5"
}

在这个例子中,有相同记录的条目:

我想要select的是:

All documents with Provider set of "MySupplier5," but only the most recent revision.

我尝试阅读有关 Aggregate 的文档,但无法获得我需要的内容。我觉得我用来解决它的方法非常低效,希望有人能指出我正确的方向。

现在,我正在这样做:

  1. 获取所有 SKU:

    db.products.distinct('sku', { provider: "MySupplier5" }, { _id: 0, sku: 1 })

  2. 遍历所有 SKU 并获取最新版本:

    db.products.find({ sku: 'abc123' }).sort({ revision: -1 }).limit(1)

可行,但感觉效率极低。

我能够使用 Mongoid 得到这两个查询 运行 就好了,我相信我也可以将给出的任何内容翻译成 Ruby 等价物。我只是想不出 "only give me the most recent revision" 在 Mongo 中怎么说。

谢谢!

对于任何寻找我根据 link 得出的答案的人,只要我在这里列出它(对于迟到的答案深表歉意)。

我花了以下所有时间 link 才能够学习并弄清楚我到底需要什么:

[
  {
    "$group": {
      "_id": "$sku",
      "maxRevision": { "$max": "$revision" },
      "originalDocuments": { "$push": "$$ROOT" }
    }
  },
  {
    "$project": {
      "originalDocument": {
        "$filter": {
          "input": "$originalDocuments",
          "as": "doc",
          "cond": {
            "$and": [
              { "$eq": ["abc123", "$$doc.sku"] },
              { "$eq": ["$maxRevision", "$$doc.revision"] }
            ]
          }
        }
      }
    }
  },
  {
    "$unwind": "$originalDocument"
  }
]