Skip to content

Message list sorting #35

@nexces

Description

@nexces

I've got currently 30 messages stored in mongodb and it seems that they are sorted mostly* by mongo internal _id field and not by date.

* take a look at _id of first message

Here is sample:

> db.messages.find({},{created:1})
{ "_id" : ObjectId("54b8e23dae8939e356b486f4"), "created" : ISODate("2015-01-16T10:04:45.464Z") }
{ "_id" : ObjectId("54aceb9001f053f503b6d55f"), "created" : ISODate("2015-01-07T08:17:20.012Z") }
{ "_id" : ObjectId("54aceb9101f053f503b6d560"), "created" : ISODate("2015-01-07T08:17:21.867Z") }
{ "_id" : ObjectId("54b8c4f0ae8939e356b486ed"), "created" : ISODate("2015-01-16T07:59:44.244Z") }
{ "_id" : ObjectId("54b8c4f1ae8939e356b486ee"), "created" : ISODate("2015-01-16T07:59:45.373Z") }
{ "_id" : ObjectId("54b8d3c7ae8939e356b486ef"), "created" : ISODate("2015-01-16T09:03:03.230Z") }
{ "_id" : ObjectId("54b8d3c8ae8939e356b486f0"), "created" : ISODate("2015-01-16T09:03:04.200Z") }
{ "_id" : ObjectId("54b8deb7ae8939e356b486f1"), "created" : ISODate("2015-01-16T09:49:43.142Z") }
{ "_id" : ObjectId("54b8deb8ae8939e356b486f2"), "created" : ISODate("2015-01-16T09:49:44.160Z") }
{ "_id" : ObjectId("54b8e23dae8939e356b486f3"), "created" : ISODate("2015-01-16T10:04:45.385Z") }
{ "_id" : ObjectId("54bcc3834a22d404b713168c"), "created" : ISODate("2015-01-19T08:42:43.207Z") }
{ "_id" : ObjectId("54bcc3844a22d404b713168d"), "created" : ISODate("2015-01-19T08:42:44.352Z") }
{ "_id" : ObjectId("54bcd8904a22d404b713168e"), "created" : ISODate("2015-01-19T10:12:32.014Z") }
{ "_id" : ObjectId("54bcd8904a22d404b713168f"), "created" : ISODate("2015-01-19T10:12:32.940Z") }
{ "_id" : ObjectId("54bd10684a22d404b7131690"), "created" : ISODate("2015-01-19T14:10:47.995Z") }
{ "_id" : ObjectId("54bd10684a22d404b7131691"), "created" : ISODate("2015-01-19T14:10:48.887Z") }
{ "_id" : ObjectId("54bd10f64a22d404b7131692"), "created" : ISODate("2015-01-19T14:13:10.700Z") }
{ "_id" : ObjectId("54bd10f74a22d404b7131693"), "created" : ISODate("2015-01-19T14:13:11.621Z") }
{ "_id" : ObjectId("54cb66fab2c2f2eb6bfaa07a"), "created" : ISODate("2015-01-30T11:11:54.303Z") }
{ "_id" : ObjectId("54cb6821b2c2f2eb6bfaa07b"), "created" : ISODate("2015-01-30T11:16:49.296Z") }
{ "_id" : ObjectId("54dc743b78319c46012e3c10"), "created" : ISODate("2015-02-12T09:36:59.434Z") }
{ "_id" : ObjectId("54dc743b78319c46012e3c11"), "created" : ISODate("2015-02-12T09:36:59.582Z") }
{ "_id" : ObjectId("54c0c7a1bb2180ce176bec27"), "created" : ISODate("2015-01-22T09:49:21.261Z") }
{ "_id" : ObjectId("54c0c7a2bb2180ce176bec28"), "created" : ISODate("2015-01-22T09:49:22.768Z") }
{ "_id" : ObjectId("54c0c87bbb2180ce176bec29"), "created" : ISODate("2015-01-22T09:52:59.805Z") }
{ "_id" : ObjectId("54c0c87cbb2180ce176bec2a"), "created" : ISODate("2015-01-22T09:53:00.741Z") }
{ "_id" : ObjectId("54c0fe5dbb2180ce176bec2b"), "created" : ISODate("2015-01-22T13:42:53.476Z") }
{ "_id" : ObjectId("54c0fe5ebb2180ce176bec2c"), "created" : ISODate("2015-01-22T13:42:54.466Z") }
{ "_id" : ObjectId("54d1e5e3ebd97577889ba0c6"), "created" : ISODate("2015-02-04T09:26:59.673Z") }
{ "_id" : ObjectId("54d1e5e4ebd97577889ba0c7"), "created" : ISODate("2015-02-04T09:27:00.894Z") }
> db.messages.find({},{created:1}).count()
30

However applying simple sort on created field is not that simple as mongo is crying about exceeding buffered data limit.

> db.messages.find({},{created:1}).sort({created:1})
error: {
        "$err" : "Runner error: Overflow sort stage buffered data usage of 34342473 bytes exceeds internal limit of 33554432 bytes",
        "code" : 17144
}

Creating additional index fixes that:

> db.messages.ensureIndex({created:1})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}
> db.messages.find({},{created:1}).sort({created:1})
{ "_id" : ObjectId("54aceb9001f053f503b6d55f"), "created" : ISODate("2015-01-07T08:17:20.012Z") }
{ "_id" : ObjectId("54aceb9101f053f503b6d560"), "created" : ISODate("2015-01-07T08:17:21.867Z") }
{ "_id" : ObjectId("54b8c4f0ae8939e356b486ed"), "created" : ISODate("2015-01-16T07:59:44.244Z") }
{ "_id" : ObjectId("54b8c4f1ae8939e356b486ee"), "created" : ISODate("2015-01-16T07:59:45.373Z") }
{ "_id" : ObjectId("54b8d3c7ae8939e356b486ef"), "created" : ISODate("2015-01-16T09:03:03.230Z") }
{ "_id" : ObjectId("54b8d3c8ae8939e356b486f0"), "created" : ISODate("2015-01-16T09:03:04.200Z") }
{ "_id" : ObjectId("54b8deb7ae8939e356b486f1"), "created" : ISODate("2015-01-16T09:49:43.142Z") }
{ "_id" : ObjectId("54b8deb8ae8939e356b486f2"), "created" : ISODate("2015-01-16T09:49:44.160Z") }
{ "_id" : ObjectId("54b8e23dae8939e356b486f3"), "created" : ISODate("2015-01-16T10:04:45.385Z") }
{ "_id" : ObjectId("54b8e23dae8939e356b486f4"), "created" : ISODate("2015-01-16T10:04:45.464Z") }
{ "_id" : ObjectId("54bcc3834a22d404b713168c"), "created" : ISODate("2015-01-19T08:42:43.207Z") }
{ "_id" : ObjectId("54bcc3844a22d404b713168d"), "created" : ISODate("2015-01-19T08:42:44.352Z") }
{ "_id" : ObjectId("54bcd8904a22d404b713168e"), "created" : ISODate("2015-01-19T10:12:32.014Z") }
{ "_id" : ObjectId("54bcd8904a22d404b713168f"), "created" : ISODate("2015-01-19T10:12:32.940Z") }
{ "_id" : ObjectId("54bd10684a22d404b7131690"), "created" : ISODate("2015-01-19T14:10:47.995Z") }
{ "_id" : ObjectId("54bd10684a22d404b7131691"), "created" : ISODate("2015-01-19T14:10:48.887Z") }
{ "_id" : ObjectId("54bd10f64a22d404b7131692"), "created" : ISODate("2015-01-19T14:13:10.700Z") }
{ "_id" : ObjectId("54bd10f74a22d404b7131693"), "created" : ISODate("2015-01-19T14:13:11.621Z") }
{ "_id" : ObjectId("54c0c7a1bb2180ce176bec27"), "created" : ISODate("2015-01-22T09:49:21.261Z") }
{ "_id" : ObjectId("54c0c7a2bb2180ce176bec28"), "created" : ISODate("2015-01-22T09:49:22.768Z") }
{ "_id" : ObjectId("54c0c87bbb2180ce176bec29"), "created" : ISODate("2015-01-22T09:52:59.805Z") }
{ "_id" : ObjectId("54c0c87cbb2180ce176bec2a"), "created" : ISODate("2015-01-22T09:53:00.741Z") }
{ "_id" : ObjectId("54c0fe5dbb2180ce176bec2b"), "created" : ISODate("2015-01-22T13:42:53.476Z") }
{ "_id" : ObjectId("54c0fe5ebb2180ce176bec2c"), "created" : ISODate("2015-01-22T13:42:54.466Z") }
{ "_id" : ObjectId("54cb66fab2c2f2eb6bfaa07a"), "created" : ISODate("2015-01-30T11:11:54.303Z") }
{ "_id" : ObjectId("54cb6821b2c2f2eb6bfaa07b"), "created" : ISODate("2015-01-30T11:16:49.296Z") }
{ "_id" : ObjectId("54d1e5e3ebd97577889ba0c6"), "created" : ISODate("2015-02-04T09:26:59.673Z") }
{ "_id" : ObjectId("54d1e5e4ebd97577889ba0c7"), "created" : ISODate("2015-02-04T09:27:00.894Z") }
{ "_id" : ObjectId("54dc743b78319c46012e3c10"), "created" : ISODate("2015-02-12T09:36:59.434Z") }
{ "_id" : ObjectId("54dc743b78319c46012e3c11"), "created" : ISODate("2015-02-12T09:36:59.582Z") }

Due to bug #34 preferred way of sorting would be newest first, but some sorting buttons over message list would also do the trick.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions