gpt4 book ai didi

mongodb - 分页时根据唯一字段mongodb获取数据

转载 作者:行者123 更新时间:2023-12-05 05:31:48 27 4
gpt4 key购买 nike

抱歉,如果标题有误,但这是我正在尝试做的,假设我有对象:

{"_id": "anyID0", "contentID": "content1", "value": "any value", "at": 10} 
{"_id": "anyID1", "contentID": "content1", "value": "any value", "at": 9}
{"_id": "anyID2", "contentID": "content2", "value": "any value", "at": 8}
{"_id": "anyID3", "contentID": "content3", "value": "any value", "at": 7}

我想执行一个查询:

  • 使用 limit 获取 20 个这样的对象
  • 让它们按at descending排序
  • 如果查询与已查询的 contentID 匹配,则跳过它而不将其视为结果。

以上述对象为例:如果我使用 query.limit(2) 其中 query 是我在这里问的那个,我希望结果是:

{"_id": "anyID0", "contentID": "content1", "value": "any value", "at": 10} 
{"_id": "anyID2", "contentID": "content2", "value": "any value", "at": 8}

所以它跳过了 {"_id": "anyID1", "contentID": "content1", "value": "any value", "at": 9}

我想知道如果没有聚合是否可能和/或它是否会有正确的性能。

我也想看看工作示例,提前致谢!

最佳答案

I would like to know if it's possible without aggregation and / or if it would have correct performances.

不,这不可能。

不幸的是,在 Mongo 中没有有效的方法来实现这一点。您必须首先按 contentId $group 所有文档,然后我们必须再次对它们进行排序,因为 $group 不保留顺序。

在这一点上,我们将能够使用 $skip$limit 进行分页,显然您可以看出这是非常低效的。

db.collection.aggregate([
{
$group: {
_id: "$contentID",
first: {
$first: "$$ROOT"
}
}
},
{
$sort: {
"first._id": 1
}
},
{
$limit: 2
},
{
$replaceRoot: {
newRoot: "$first"
}
}
])

Mongo Playground

如果您对架构或更新另一个集合持开放态度,这将是最好的,例如,您可以创建另一个仅包含第一个文档的集合。这将允许轻松分页,在更新时维护它也有点容易,但如果你有很多删除,这种方法也不是最佳的,我建议你去改变模式。

关于mongodb - 分页时根据唯一字段mongodb获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74290603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com