Ruby MongoDB - как сортировать записи по дате и времени? - PullRequest
1 голос
/ 12 сентября 2010

Должно быть, я сделал это неправильно: распечатанные записи вышли из строя, даже если они вставляются в БД по одной за раз. Вот код:

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>

Я пытаюсь получить все записи из БД в порядке даты и времени, как мне этого добиться?

Заранее большое спасибо.

Обновленная информация:

Если подумать, я время от времени меняю тип данных на эпоху Unix, поэтому сортировать их будет лучше и проще.

1 Ответ

5 голосов
/ 12 сентября 2010

Несколько замечаний здесь:

Вы можете получить записи по порядку, добавив сортировку:

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

Вам не нужно выполнять итерации перед вводом шаблона.Метод 'find' возвращает курсор, который сам по себе является итеративным.Так что

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

Следует читать

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

Установление нового соединения при каждом запросе очень неэффективно.Вы должны установить соединение в блоке configure и кэшировать там базу данных:

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

Затем просто используйте ссылку на БД в ваших запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...