Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Tailable Cursors

TylerBrock edited this page · 4 revisions

Tailable cursors in Ruby

Tailable cursors are cursors that remain open even after they've returned a final result. This way, if more documents are added to a collection (i.e., to the cursor's result set), then you can continue to call Cursor#next to retrieve those results. Here's a complete test case that demonstrates the use of tailable cursors.

Note that tailable cursors are for capped collections only.

require 'mongo'
require 'test/unit'

class TestTailable < Test::Unit::TestCase
  include Mongo

  def test_tailable

    # Create a connection and capped collection.
    @mongo_client = MongoClient.new('localhost', 27017)
    @db  = @mongo_client['test']
    @db.drop_collection('log')
    @capped = @db.create_collection('log', :capped => true, :size => 1024)

    # Insert 10 documents.
    10.times do |n|
      @capped.insert({:n => n})
    end

    # Create a tailable cursor that iterates the collection in natural order
    @tail = Cursor.new(@capped, :tailable => true, :order => [['$natural', 1]])

    # Call Cursor#next 10 times. Each call returns a document.
    10.times do
      assert @tail.next
    end

    # But the 11th time, the cursor returns nothing.
    assert_nil @tail.next

    # Add a document to the capped collection.
    @capped.insert({:n => 100})

    # Now call Cursor#next again. This will return the just-inserted result.
    assert @tail.next

    # Close the cursor.
    @tail.close
  end
end
Something went wrong with that request. Please try again.