Skip to content

Tailable Cursors

TylerBrock edited this page Jan 8, 2013 · 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 ='localhost', 27017)
    @db  = @mongo_client['test']
    @capped = @db.create_collection('log', :capped => true, :size => 1024)

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

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

    # Call Cursor#next 10 times. Each call returns a document.
    10.times do

    # But the 11th time, the cursor returns nothing.

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

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

    # Close the cursor.
Something went wrong with that request. Please try again.