gpt4 book ai didi

javascript - 我需要使用 mongodb native 驱动程序来查找按时间戳字段排序的不同 ID

转载 作者:行者123 更新时间:2023-12-03 10:52:58 24 4
gpt4 key购买 nike

我正在使用nodejs mongodb native 驱动程序。我正在写一个聊天程序。我有一个名为dialog 的集合,其中包含sessionId 和dateCreated(时间戳)字段。我需要一个按最后(最大)创建日期时间戳排序的不同 sessionId 列表。我还需要 20 条记录的限制。

这是我到目前为止所拥有的(显然缺乏排序):

db.collection('dialog').distinct('sessionId',
function(err, users){
if(users.length > 10){
users = users.slice(0, 20);
}
console.log("users: " + users);


});

这里有几个文档。

{ 
"sessionId" : 455206183,
"msg" : "hi what's up?",
"dateCreated" : ISODate("2015-02-05T20:17:55.418Z"),
"_id" : ObjectId("54d3cff30e3ddb6922fbc2bb")
}, {
"sessionId" : 163220612,
"msg" : "yo",
"dateCreated" : ISODate("2015-02-05T20:18:00.434Z"),
"_id" : ObjectId("54d3cff80e3ddb6922fbc2bc")
}

最佳答案

正如评论中所指出的,您可能需要一个聚合才能获得想要的结果。像下面这样的东西可能适合你:

db.dialog.aggregate([
{ $sort: { "$dateCreated": -1, "$sessionId": 1 }},
{ $group: { _id: "$sessionId", dateCreated: {$first: "$dateCreated"} }},
{ $limit: 20 },
{ $project: { sessionId: 1, _id: 0 }}
]);

在这里,我们首先按 dateCreatedsessionId 对集合进行排序,按不同的 ID 对它们进行分组,然后选择 $first dateCreated(最新的),将结果限制为 20 并返回一个对象数组,每个对象仅包含 sessionId 值。

请注意,我没有尝试过这个,所以请告诉我它是否适合您。

关于javascript - 我需要使用 mongodb native 驱动程序来查找按时间戳字段排序的不同 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375386/

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