Mic*_*Mao 1 ruby sinatra mongodb
我必须以错误的方式完成它:打印出的记录是乱序的,即使它们一次插入到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
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
我试图按日期时间顺序从数据库中获取所有记录,我该如何实现?
非常感谢提前.
更新信息:
第二个想法,我将数据类型从时间更改为unix时代,因此对它们进行排序会更好,更容易.
这里有几点说明:
您可以通过添加排序来按顺序获取记录:
@notes.find({}, :sort => 'datetime')
Run Code Online (Sandbox Code Playgroud)
在输入模板之前,您无需进行迭代.'find'方法返回一个游标,它本身是可迭代的.所以
@notelist = Set.new()
@notes.find().each{|record| @notelist.add(record)}
Run Code Online (Sandbox Code Playgroud)
应该读
@notelist = @notes.find({}, :sort => 'datetime')
Run Code Online (Sandbox Code Playgroud)
在每个请求上建立新连接效率非常低.您应该在配置块上建立连接,并在那里缓存数据库:
configure do
DB = Mongo::Connection.new.db("testdb")
end
Run Code Online (Sandbox Code Playgroud)
然后在您的请求中使用对DB的引用.
| 归档时间: |
|
| 查看次数: |
3170 次 |
| 最近记录: |