我正在使用nodejs mongodb本机驱动程序。我正在编写一个聊天程序。我有一个称为对话框的集合,其中具有sessionId和dateCreated(时间戳)字段。我需要一个按其上次(最大)dateCreated时间戳排序的不同sessionIds顺序的列表。我还需要限制为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分组,并选择dateCreated$first(最新的),将结果限制为20,并分别返回对象数组仅包含sessionId值。

请注意,我没有尝试过这种方法,因此请告诉我它是否适合您。

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

10-16 19:51