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"
}
在这个例子中,有相同记录的条目:
- 不同
_id
- 一样
sku
- 一样
provider
_revision
设置为 1、2、3 和 4(每个文档一个)
- 多种
_created
日期
我想要select的是:
All documents with Provider set of "MySupplier5," but only the most recent revision.
我尝试阅读有关 Aggregate 的文档,但无法获得我需要的内容。我觉得我用来解决它的方法非常低效,希望有人能指出我正确的方向。
现在,我正在这样做:
获取所有 SKU:
db.products.distinct('sku', { provider: "MySupplier5" }, { _id: 0, sku: 1 })
遍历所有 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"
}
]
我正在尝试查询预建的 MongoDB,它为每个条目保留修订信息。数据的示例如下:
{
"_id": ObjectId("5cd48bad15447900012fae00"),
"sku": "abc123",
"_revision": 5
"_created": ISODate("2019-05-10T15:00:00.000Z"),
"provider": "MySupplier5"
}
在这个例子中,有相同记录的条目:
- 不同
_id
- 一样
sku
- 一样
provider
_revision
设置为 1、2、3 和 4(每个文档一个)- 多种
_created
日期
我想要select的是:
All documents with Provider set of "MySupplier5," but only the most recent revision.
我尝试阅读有关 Aggregate 的文档,但无法获得我需要的内容。我觉得我用来解决它的方法非常低效,希望有人能指出我正确的方向。
现在,我正在这样做:
获取所有 SKU:
db.products.distinct('sku', { provider: "MySupplier5" }, { _id: 0, sku: 1 })
遍历所有 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"
}
]