当前位置:  开发笔记 > 编程语言 > 正文

Ruby MongoDB-如何根据日期时间对记录进行排序?

如何解决《RubyMongoDB-如何根据日期时间对记录进行排序?》经验,为你挑选了1个好方法。

我必须以错误的方式完成它:打印出的记录是乱序的,即使它们一次插入到db中.这是代码:

get '/' do
  db = Mongo::Connection.new("localhost", 27017).db("testdb")
  @notes = db.collection('notes')
  @notelist = Set.new()
  @notes.find().each{|record| @notelist.add(record)}
  erb :list
end

post '/addnote' do
  db = Mongo::Connection.new("localhost", 27017).db("testdb")
  col1 = db.collection('notes')
  col1.insert(
  {
    "guestname" => "#{params[:post][:guestname]}",
    "note"      => "#{params[:post][:note]}",
    "datetime"  => Time.now.strftime("%I:%M %p %d-%b-%Y")
  })
redirect '/'
end

这是erb模板:

<%= @notelist.size() %> notes entered by guests:

    <% @notelist.each do |record| %>
  • <%= record['guestname'].to_s() + " at " + record['datetime'].to_s() +" wrote: " + record['note'].to_s() %>
  • <% end %>

我试图按日期时间顺序从数据库中获取所有记录,我该如何实现?

非常感谢提前.

更新信息:

第二个想法,我将数据类型从时间更改为unix时代,因此对它们进行排序会更好,更容易.



1> Kyle Banker..:

这里有几点说明:

您可以通过添加排序来按顺序获取记录:

@notes.find({}, :sort => 'datetime')

在输入模板之前,您无需进行迭代.'find'方法返回一个游标,它本身是可迭代的.所以

@notelist = Set.new()
@notes.find().each{|record| @notelist.add(record)}

应该读

@notelist = @notes.find({}, :sort => 'datetime')

在每个请求上建立新连接效率非常低.您应该在配置块上建立连接,并在那里缓存数据库:

configure do
  DB = Mongo::Connection.new.db("testdb")
end

然后在您的请求中使用对DB的引用.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有