MongoDB排序

teg*_*ggy 33 mongodb

我希望为主题实现"碰撞"功能.一旦主题被碰撞,它将有一个新的"bump_date"字段.我想对它进行排序,以便当存在"bump_date"字段时,它将被排序为好像它是"已创建"字段.这是我的db.topics的一个例子:

{
    "text" : "test 1",
    "created" : "Sun Nov 20 2011 02:03:28 GMT-0800 (PST)"
},
{
    "text" : "test 2",
    "created" : "Sun Nov 18 2011 02:03:28 GMT-0800 (PST)"
},
{
    "text" : "test 3",
    "created" : "Sun Nov 17 2011 02:03:28 GMT-0800 (PST)",
    "bump_date: : "Sun Nov 19 2011 02:03:28 GMT-0800 (PST)"
}
Run Code Online (Sandbox Code Playgroud)

我希望排序按"测试1","测试3","测试2"的顺序返回

Bri*_*cks 80

MongoDB中的排序是这样完成的:

db.collection.find({ ... spec ... }).sort({ key: 1 })

在哪里1上升和-1下降.

在您的具体示例中:db.topics.find().sort({ bump_date: 1 })尽管将其称为"updated_at"可能更好.

您还肯定要在"bump_date"字段中添加索引.

  • 为了使其按预期工作,我认为在第一次保存文档时,OP需要将`bump_date`设置为`created`.然后你按照你的建议总是按`bump_date`排序并对其进行索引. (2认同)

Tyl*_*ock 5

正如Brian Hicks建议的那样,创建一个额外的updated_at字段是可行的方法.这样,在创建文档时,您可以使created_at和updated_at最初相同.

{
     "created_at": xxx,
     "updated_at": xxx
}
Run Code Online (Sandbox Code Playgroud)

如果然后通过将updated_at字段设置为当有碰撞事件时的当前时间来"碰撞"updated_at字段,则可以对updated_at字段进行排序以实现所需的排序.


One*_*der 5

也:

db.collection.find( { $query: {}, $orderby: { column : -1 } } )
Run Code Online (Sandbox Code Playgroud)

其中1是升序,-1是降序.