gpt4 book ai didi

javascript - 蒙戈聚合

转载 作者:行者123 更新时间:2023-12-03 11:35:29 24 4
gpt4 key购买 nike

我的收藏中有以下文档

{
"_id": ObjectId("54490b8104f7142f22ecc97f"),
"title": "Sample1",
"slug": "samplenews",
"cat": "sports",
"desc": "sampletextsampletext",
"published_date": ISODate("2014-10-23T14:06:57.0Z"),

} {
"_id": ObjectId("54490b8104f7142f22ecc97f"),
"title": "Sample2",
"slug": "samplenews2",
"category": "entertaintment",
"desc": "sampletextsampletext",
"published_date": ISODate("2014-10-22T14:06:57.0Z"),

} {
"_id": ObjectId("54490b8104f7142f22ecc97f"),
"title": "Sample3",
"slug": "samplenews3",
"category": "entertaintment",
"desc": "sampletextsampletext",
"published_date": ISODate("2014-9-22T14:06:57.0Z"),

} {
"_id": ObjectId("54490b8104f7142f22ecc97f"),
"title": "Sample4",
"slug": "samplenews4",
"category": "other",
"desc": "sampletextsampletext",
"published_date": ISODate("2014-10-22T14:06:57.0Z"),

}

我需要一个查询来获取每个类别的前 5 条最新新闻。有什么建议吗?

最佳答案

假设您安装了最新版本的 mongodb,一种方法是:

  • 根据 published_date 按降序对记录进行排序
  • 根据记录的类别对记录进行分组。对于每个组,将所有记录收集到一个数组中。
  • 在 javascript/客户端代码中,对每个组(类别)的前 5 条记录进行切片

$slice 在服务器端 $project 聚合管道运算符中不可用,这使我们无法在服务器端执行操作。

var result = db.collection.aggregate(
[
{$sort:{"published_date":-1}},
{$group:{"_id":"$category","values":{$push:"$$ROOT"}}}
]
).map(function(doc){
return {"category":doc._id,"records":doc.values.slice(0,5)};
});

result 变量现在将是一个文档数组。每个文档代表每个类别,并依次具有一个由前5 记录组成的数组。

关于javascript - 蒙戈聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26532609/

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