Ruby MongoDB-如何根据日期时间对记录进行排序?
问题描述:
我必须以错误的方式完成它:打印出来的记录失常,即使它们一次插入到一个数据库中。下面是代码:Ruby MongoDB-如何根据日期时间对记录进行排序?
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模板:
<p><%= @notelist.size() %> notes entered by guests:</p>
<ul>
<% @notelist.each do |record| %>
<li><font color='blue'><%= record['guestname'].to_s() +
"</font> at <i>" + record['datetime'].to_s() +"</i> wrote: " +
record['note'].to_s() %></li>
<% end %>
</ul>
我试图让日期时间的顺序所有记录了DB的,我怎么能做到这一点?
非常感谢。
更新的信息:
关于第二个想法,我改变数据类型,从时间到UNIX时代,所以它们排序会更好,更容易。
答
这里的几个注意事项:
您可以通过添加一种获得订单记录:
@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的引用。
哇,我认为这实际上超出了我的预期,感谢您的帮助! – 2010-09-12 22:32:04
我完成了所有其他任务,但我仍然不确定如何使用配置块?任何暗示? – 2010-09-13 12:11:05
当然。看看这个简单的Sinatra应用程序:http://github.com/banker/mongulator/blob/master/mongulator.rb – 2010-09-13 15:40:51