gpt4 book ai didi

javascript - MongoDB Group By _id 的时间戳

转载 作者:可可西里 更新时间:2023-11-01 10:31:07 26 4
gpt4 key购买 nike

我希望按创建日期对一堆文档进行分组。

使用 MongoDB 聚合框架,是否可以按 _id 的时间戳对文档进行分组?

类似的东西

db.sessions.aggregate(
{ $group :
{_id: { $dayOfYear: "$_id.getTimestamp()"},
count: { $sum: 1 }
}
})

谢谢

最佳答案

您在这里提到的函数是作为 ObjectId 包装器的 shell 帮助程序实现的 JavaScript 方法。各种语言的其他驱动程序实现包含类似的方法,其基本功能可以从 mongo shell 中看到,如下所示:

function (){
return new Date(parseInt(this.valueOf().slice(0,8), 16)*1000);
}

但这至少在 shell 上下文中是 JavaScript,您不能在聚合框架内使用 JavaScript 方法,只允许使用已实现的运算符。目前在聚合框架方法中没有“助手”可以从 ObjectId 中提取“时间戳”。

此外,聚合框架目前还缺少如上例所示的实现此功能所需的功能。您不可能将 ObjectId“转换”为字符串,更不用说将字符串转换为整数或从基本类型转换了。

对于聚合框架,最好的设计方法是在文档中包含所需的日期值并进行相应更新。

如果您真的不想这样做并且必须从 ObjectId 值中提取日期,那么您需要将 JavaScript 评估与 mapReduce 一起使用,或者以其他方式传输到客户端代码:

db.collection.mapReduce(
function() {
// Get time group per day
var id = this._id.getTimestamp()
- ( this._id.getTimestamp() % ( 1000 * 60 * 60 * 24 ) );
delete this._id;
emit( id, this );
},
function(key,values) {
// some reduce operation
},
{ "out": { "inline": 1 } }
)

关于javascript - MongoDB Group By _id 的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24855270/

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