mongo-find_replace 0.18.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +202 -0
- data/README.rdoc +358 -0
- data/Rakefile +133 -0
- data/bin/bson_benchmark.rb +59 -0
- data/bin/fail_if_no_c.rb +11 -0
- data/examples/admin.rb +42 -0
- data/examples/capped.rb +22 -0
- data/examples/cursor.rb +48 -0
- data/examples/gridfs.rb +88 -0
- data/examples/index_test.rb +126 -0
- data/examples/info.rb +31 -0
- data/examples/queries.rb +70 -0
- data/examples/simple.rb +24 -0
- data/examples/strict.rb +35 -0
- data/examples/types.rb +36 -0
- data/lib/mongo.rb +61 -0
- data/lib/mongo/admin.rb +95 -0
- data/lib/mongo/collection.rb +664 -0
- data/lib/mongo/connection.rb +555 -0
- data/lib/mongo/cursor.rb +393 -0
- data/lib/mongo/db.rb +527 -0
- data/lib/mongo/exceptions.rb +60 -0
- data/lib/mongo/gridfs.rb +22 -0
- data/lib/mongo/gridfs/chunk.rb +90 -0
- data/lib/mongo/gridfs/grid_store.rb +555 -0
- data/lib/mongo/types/binary.rb +48 -0
- data/lib/mongo/types/code.rb +36 -0
- data/lib/mongo/types/dbref.rb +38 -0
- data/lib/mongo/types/min_max_keys.rb +58 -0
- data/lib/mongo/types/objectid.rb +219 -0
- data/lib/mongo/types/regexp_of_holding.rb +45 -0
- data/lib/mongo/util/bson_c.rb +18 -0
- data/lib/mongo/util/bson_ruby.rb +595 -0
- data/lib/mongo/util/byte_buffer.rb +222 -0
- data/lib/mongo/util/conversions.rb +97 -0
- data/lib/mongo/util/ordered_hash.rb +135 -0
- data/lib/mongo/util/server_version.rb +69 -0
- data/lib/mongo/util/support.rb +26 -0
- data/lib/mongo/util/xml_to_ruby.rb +112 -0
- data/mongo-ruby-driver.gemspec +28 -0
- data/test/replica/count_test.rb +34 -0
- data/test/replica/insert_test.rb +50 -0
- data/test/replica/pooled_insert_test.rb +54 -0
- data/test/replica/query_test.rb +39 -0
- data/test/test_admin.rb +67 -0
- data/test/test_bson.rb +397 -0
- data/test/test_byte_buffer.rb +81 -0
- data/test/test_chunk.rb +82 -0
- data/test/test_collection.rb +534 -0
- data/test/test_connection.rb +160 -0
- data/test/test_conversions.rb +120 -0
- data/test/test_cursor.rb +386 -0
- data/test/test_db.rb +254 -0
- data/test/test_db_api.rb +783 -0
- data/test/test_db_connection.rb +16 -0
- data/test/test_grid_store.rb +306 -0
- data/test/test_helper.rb +42 -0
- data/test/test_objectid.rb +156 -0
- data/test/test_ordered_hash.rb +168 -0
- data/test/test_round_trip.rb +114 -0
- data/test/test_slave_connection.rb +36 -0
- data/test/test_threading.rb +87 -0
- data/test/threading/test_threading_large_pool.rb +90 -0
- data/test/unit/collection_test.rb +52 -0
- data/test/unit/connection_test.rb +59 -0
- data/test/unit/cursor_test.rb +94 -0
- data/test/unit/db_test.rb +97 -0
- metadata +123 -0
data/Rakefile
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
# -*- mode: ruby; -*-
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rubygems/specification'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'rake'
|
6
|
+
require 'rake/testtask'
|
7
|
+
require 'rake/gempackagetask'
|
8
|
+
begin
|
9
|
+
require 'rake/contrib/rubyforgepublisher'
|
10
|
+
rescue LoadError
|
11
|
+
end
|
12
|
+
require 'rbconfig'
|
13
|
+
include Config
|
14
|
+
ENV['TEST_MODE'] = 'TRUE'
|
15
|
+
|
16
|
+
desc "Test the MongoDB Ruby driver."
|
17
|
+
task :test do
|
18
|
+
puts "\nThis option has changed."
|
19
|
+
puts "\nTo test the driver with the c-extensions:\nrake test:c\n"
|
20
|
+
puts "To test the pure ruby driver: \nrake test:ruby"
|
21
|
+
end
|
22
|
+
|
23
|
+
namespace :test do
|
24
|
+
|
25
|
+
desc "Test the driver with the c extension enabled."
|
26
|
+
task :c do
|
27
|
+
ENV['C_EXT'] = 'TRUE'
|
28
|
+
Rake::Task['test:unit'].invoke
|
29
|
+
Rake::Task['test:functional'].invoke
|
30
|
+
Rake::Task['test:pooled_threading'].invoke
|
31
|
+
Rake::Task['test:drop_databases'].invoke
|
32
|
+
ENV['C_EXT'] = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Test the driver using pure ruby (no c extension)"
|
36
|
+
task :ruby do
|
37
|
+
ENV['C_EXT'] = nil
|
38
|
+
Rake::Task['test:unit'].invoke
|
39
|
+
Rake::Task['test:functional'].invoke
|
40
|
+
Rake::Task['test:pooled_threading'].invoke
|
41
|
+
Rake::Task['test:drop_databases'].invoke
|
42
|
+
end
|
43
|
+
|
44
|
+
Rake::TestTask.new(:unit) do |t|
|
45
|
+
t.test_files = FileList['test/unit/*_test.rb']
|
46
|
+
t.verbose = true
|
47
|
+
end
|
48
|
+
|
49
|
+
Rake::TestTask.new(:functional) do |t|
|
50
|
+
t.test_files = FileList['test/test*.rb']
|
51
|
+
t.verbose = true
|
52
|
+
end
|
53
|
+
|
54
|
+
Rake::TestTask.new(:pooled_threading) do |t|
|
55
|
+
t.test_files = FileList['test/threading/*.rb']
|
56
|
+
t.verbose = true
|
57
|
+
end
|
58
|
+
|
59
|
+
Rake::TestTask.new(:pair_count) do |t|
|
60
|
+
t.test_files = FileList['test/replica/count_test.rb']
|
61
|
+
t.verbose = true
|
62
|
+
end
|
63
|
+
|
64
|
+
Rake::TestTask.new(:pair_insert) do |t|
|
65
|
+
t.test_files = FileList['test/replica/insert_test.rb']
|
66
|
+
t.verbose = true
|
67
|
+
end
|
68
|
+
|
69
|
+
Rake::TestTask.new(:pooled_pair_insert) do |t|
|
70
|
+
t.test_files = FileList['test/replica/pooled_insert_test.rb']
|
71
|
+
t.verbose = true
|
72
|
+
end
|
73
|
+
|
74
|
+
Rake::TestTask.new(:pair_query) do |t|
|
75
|
+
t.test_files = FileList['test/replica/query_test.rb']
|
76
|
+
t.verbose = true
|
77
|
+
end
|
78
|
+
|
79
|
+
task :drop_databases do |t|
|
80
|
+
puts "Dropping test database..."
|
81
|
+
require File.join(File.dirname(__FILE__), 'lib', 'mongo')
|
82
|
+
include Mongo
|
83
|
+
con = Connection.new(ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost',
|
84
|
+
ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT)
|
85
|
+
con.drop_database('ruby-mongo-test')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
desc "Generate documentation"
|
90
|
+
task :rdoc do
|
91
|
+
version = eval(File.read("mongo-ruby-driver.gemspec")).version
|
92
|
+
out = File.join('html', version.to_s)
|
93
|
+
FileUtils.rm_rf('html')
|
94
|
+
system "rdoc --main README.rdoc --op #{out} --inline-source --quiet README.rdoc `find lib -name '*.rb'`"
|
95
|
+
end
|
96
|
+
|
97
|
+
desc "Generate YARD documentation"
|
98
|
+
task :ydoc do
|
99
|
+
version = eval(File.read("mongo-ruby-driver.gemspec")).version
|
100
|
+
out = File.join('ydoc', version.to_s)
|
101
|
+
FileUtils.rm_rf('ydoc')
|
102
|
+
system "yardoc lib/**/*.rb lib/mongo/**/*.rb -o #{out} --title MongoRuby-#{version}"
|
103
|
+
end
|
104
|
+
|
105
|
+
desc "Publish documentation to mongo.rubyforge.org"
|
106
|
+
task :publish => [:rdoc] do
|
107
|
+
# Assumes docs are in ./html
|
108
|
+
Rake::RubyForgePublisher.new(GEM, RUBYFORGE_USER).upload
|
109
|
+
end
|
110
|
+
|
111
|
+
namespace :gem do
|
112
|
+
|
113
|
+
desc "Install the gem locally"
|
114
|
+
task :install do
|
115
|
+
sh "gem build mongo-ruby-driver.gemspec"
|
116
|
+
sh "gem install mongo-*.gem"
|
117
|
+
sh "rm mongo-*.gem"
|
118
|
+
end
|
119
|
+
|
120
|
+
desc "Install the optional c extensions"
|
121
|
+
task :install_extensions do
|
122
|
+
sh "gem build mongo-extensions.gemspec"
|
123
|
+
sh "gem install mongo_ext-*.gem"
|
124
|
+
sh "rm mongo_ext-*.gem"
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
task :default => :list
|
130
|
+
|
131
|
+
task :list do
|
132
|
+
system 'rake -T'
|
133
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
+
require 'mongo'
|
5
|
+
|
6
|
+
include Mongo
|
7
|
+
|
8
|
+
TRIALS = 100000
|
9
|
+
|
10
|
+
def encode(doc)
|
11
|
+
t0 = Time.new
|
12
|
+
b = BSON.new
|
13
|
+
TRIALS.times { |i|
|
14
|
+
b = BSON.new
|
15
|
+
b.serialize doc
|
16
|
+
}
|
17
|
+
print "took: #{Time.now.to_f - t0.to_f}\n"
|
18
|
+
return b
|
19
|
+
end
|
20
|
+
|
21
|
+
def decode(bson)
|
22
|
+
t0 = Time.new
|
23
|
+
doc = nil
|
24
|
+
TRIALS.times { |i|
|
25
|
+
doc = bson.deserialize
|
26
|
+
}
|
27
|
+
print "took: #{Time.now.to_f - t0.to_f}\n"
|
28
|
+
return doc
|
29
|
+
end
|
30
|
+
|
31
|
+
TEST_CASES = [{},
|
32
|
+
{
|
33
|
+
"hello" => "world"
|
34
|
+
},
|
35
|
+
{
|
36
|
+
"hello" => "world",
|
37
|
+
"mike" => "something",
|
38
|
+
"here's" => "another"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"int" => 200,
|
42
|
+
"bool" => true,
|
43
|
+
"an int" => 20,
|
44
|
+
"a bool" => false
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"this" => 5,
|
48
|
+
"is" => {"a" => true},
|
49
|
+
"big" => [true, 5.5],
|
50
|
+
"object" => nil
|
51
|
+
}]
|
52
|
+
|
53
|
+
TEST_CASES.each { |doc|
|
54
|
+
print "case #{doc.inspect}\n"
|
55
|
+
print "enc bson\n"
|
56
|
+
enc_bson = encode(doc)
|
57
|
+
print "dec bson\n"
|
58
|
+
raise "FAIL" unless doc == decode(enc_bson)
|
59
|
+
}
|
data/bin/fail_if_no_c.rb
ADDED
data/examples/admin.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
|
3
|
+
require 'mongo'
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
include Mongo
|
7
|
+
|
8
|
+
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
9
|
+
port = ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT
|
10
|
+
|
11
|
+
puts "Connecting to #{host}:#{port}"
|
12
|
+
db = Mongo::Connection.new(host, port).db('ruby-mongo-examples')
|
13
|
+
coll = db.create_collection('test')
|
14
|
+
|
15
|
+
# Erase all records from collection, if any
|
16
|
+
coll.remove
|
17
|
+
|
18
|
+
admin = db.admin
|
19
|
+
|
20
|
+
# Profiling level set/get
|
21
|
+
puts "Profiling level: #{admin.profiling_level}"
|
22
|
+
|
23
|
+
# Start profiling everything
|
24
|
+
admin.profiling_level = :all
|
25
|
+
|
26
|
+
# Read records, creating a profiling event
|
27
|
+
coll.find().to_a
|
28
|
+
|
29
|
+
# Stop profiling
|
30
|
+
admin.profiling_level = :off
|
31
|
+
|
32
|
+
# Print all profiling info
|
33
|
+
pp admin.profiling_info
|
34
|
+
|
35
|
+
# Validate returns a hash if all is well and
|
36
|
+
# raises an exception if there is a problem.
|
37
|
+
info = admin.validate_collection(coll.name)
|
38
|
+
puts "valid = #{info['ok']}"
|
39
|
+
puts info['result']
|
40
|
+
|
41
|
+
# Destroy the collection
|
42
|
+
coll.drop
|
data/examples/capped.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'mongo'
|
3
|
+
|
4
|
+
include Mongo
|
5
|
+
|
6
|
+
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
7
|
+
port = ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT
|
8
|
+
|
9
|
+
puts "Connecting to #{host}:#{port}"
|
10
|
+
db = Connection.new(host, port).db('ruby-mongo-examples')
|
11
|
+
db.drop_collection('test')
|
12
|
+
|
13
|
+
# A capped collection has a max size and, optionally, a max number of records.
|
14
|
+
# Old records get pushed out by new ones once the size or max num records is reached.
|
15
|
+
coll = db.create_collection('test', :capped => true, :size => 1024, :max => 12)
|
16
|
+
|
17
|
+
100.times { |i| coll.insert('a' => i+1) }
|
18
|
+
|
19
|
+
# We will only see the last 12 records
|
20
|
+
coll.find().each { |row| p row }
|
21
|
+
|
22
|
+
coll.drop
|
data/examples/cursor.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
|
3
|
+
require 'mongo'
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
include Mongo
|
7
|
+
|
8
|
+
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
9
|
+
port = ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT
|
10
|
+
|
11
|
+
puts "Connecting to #{host}:#{port}"
|
12
|
+
db = Connection.new(host, port).db('ruby-mongo-examples')
|
13
|
+
coll = db.collection('test')
|
14
|
+
|
15
|
+
# Erase all records from collection, if any
|
16
|
+
coll.remove
|
17
|
+
|
18
|
+
# Insert 3 records
|
19
|
+
3.times { |i| coll.insert({'a' => i+1}) }
|
20
|
+
|
21
|
+
# Cursors don't run their queries until you actually attempt to retrieve data
|
22
|
+
# from them.
|
23
|
+
|
24
|
+
# Find returns a Cursor, which is Enumerable. You can iterate:
|
25
|
+
coll.find().each { |row| pp row }
|
26
|
+
|
27
|
+
# You can turn it into an array:
|
28
|
+
array = coll.find().to_a
|
29
|
+
|
30
|
+
# You can iterate after turning it into an array (the cursor will iterate over
|
31
|
+
# the copy of the array that it saves internally.)
|
32
|
+
cursor = coll.find()
|
33
|
+
array = cursor.to_a
|
34
|
+
cursor.each { |row| pp row }
|
35
|
+
|
36
|
+
# You can get the next object
|
37
|
+
first_object = coll.find().next_document
|
38
|
+
|
39
|
+
# next_document returns nil if there are no more objects that match
|
40
|
+
cursor = coll.find()
|
41
|
+
obj = cursor.next_document
|
42
|
+
while obj
|
43
|
+
pp obj
|
44
|
+
obj = cursor.next_document
|
45
|
+
end
|
46
|
+
|
47
|
+
# Destroy the collection
|
48
|
+
coll.drop
|
data/examples/gridfs.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
|
3
|
+
require 'mongo'
|
4
|
+
require 'mongo/gridfs'
|
5
|
+
|
6
|
+
include Mongo
|
7
|
+
include GridFS
|
8
|
+
|
9
|
+
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
10
|
+
port = ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT
|
11
|
+
|
12
|
+
puts "Connecting to #{host}:#{port}"
|
13
|
+
db = Connection.new(host, port).db('ruby-mongo-examples')
|
14
|
+
|
15
|
+
def dump(db, fname)
|
16
|
+
GridStore.open(db, fname, 'r') { |f| puts f.read }
|
17
|
+
end
|
18
|
+
|
19
|
+
# Write a new file
|
20
|
+
GridStore.open(db, 'foobar', 'w') { |f| f.write("hello, world!") }
|
21
|
+
|
22
|
+
# Read it and print out the contents
|
23
|
+
dump(db, 'foobar')
|
24
|
+
|
25
|
+
# Append more data
|
26
|
+
GridStore.open(db, 'foobar', 'w+') { |f| f.write("\n"); f.puts "line two" }
|
27
|
+
dump(db, 'foobar')
|
28
|
+
|
29
|
+
# Overwrite
|
30
|
+
GridStore.open(db, 'foobar', 'w') { |f| f.puts "hello, sailor!" }
|
31
|
+
dump(db, 'foobar')
|
32
|
+
|
33
|
+
# File existence tests
|
34
|
+
puts "File 'foobar' exists: #{GridStore.exist?(db, 'foobar')}"
|
35
|
+
puts "File 'does-not-exist' exists: #{GridStore.exist?(db, 'does-not-exist')}"
|
36
|
+
|
37
|
+
# Read with offset (uses seek)
|
38
|
+
puts GridStore.read(db, 'foobar', 6, 7)
|
39
|
+
|
40
|
+
# Rewind/seek/tell
|
41
|
+
GridStore.open(db, 'foobar', 'w') { |f|
|
42
|
+
f.write "hello, world!"
|
43
|
+
f.rewind
|
44
|
+
f.write "xyzzz"
|
45
|
+
puts f.tell # => 5
|
46
|
+
f.seek(4)
|
47
|
+
f.write('y')
|
48
|
+
}
|
49
|
+
dump(db, 'foobar') # => 'xyzzy'
|
50
|
+
|
51
|
+
# Unlink (delete)
|
52
|
+
GridStore.unlink(db, 'foobar')
|
53
|
+
puts "File 'foobar' exists after delete: #{GridStore.exist?(db, 'foobar')}"
|
54
|
+
|
55
|
+
# Metadata
|
56
|
+
GridStore.open(db, 'foobar', 'w') { |f| f.write("hello, world!") }
|
57
|
+
GridStore.open(db, 'foobar', 'r') { |f|
|
58
|
+
puts f.content_type
|
59
|
+
puts f.upload_date
|
60
|
+
puts f.chunk_size
|
61
|
+
puts f.metadata.inspect
|
62
|
+
}
|
63
|
+
|
64
|
+
# Add some metadata; change content type
|
65
|
+
GridStore.open(db, 'foobar', 'w+') { |f|
|
66
|
+
f.content_type = 'text/xml'
|
67
|
+
f.metadata = {'a' => 1}
|
68
|
+
}
|
69
|
+
# Print it
|
70
|
+
GridStore.open(db, 'foobar', 'r') { |f|
|
71
|
+
puts f.content_type
|
72
|
+
puts f.upload_date
|
73
|
+
puts f.chunk_size
|
74
|
+
puts f.metadata.inspect
|
75
|
+
}
|
76
|
+
|
77
|
+
# You can also set metadata when initially writing the file. Setting :root
|
78
|
+
# means that the file and its chunks are stored in a different root
|
79
|
+
# collection: instead of gridfs.files and gridfs.chunks, here we use
|
80
|
+
# my_files.files and my_files.chunks.
|
81
|
+
GridStore.open(db, 'foobar', 'w',
|
82
|
+
:content_type => 'text/plain',
|
83
|
+
:metadata => {'a' => 1},
|
84
|
+
:chunk_size => 1024 * 4,
|
85
|
+
:root => 'my_files') { |f|
|
86
|
+
f.puts 'hello, world'
|
87
|
+
}
|
88
|
+
|
@@ -0,0 +1,126 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
|
3
|
+
require 'mongo'
|
4
|
+
|
5
|
+
include Mongo
|
6
|
+
|
7
|
+
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
8
|
+
port = ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT
|
9
|
+
|
10
|
+
puts ">> Connecting to #{host}:#{port}"
|
11
|
+
db = Connection.new(host, port).db('ruby-mongo-index_test')
|
12
|
+
|
13
|
+
class Exception
|
14
|
+
def errmsg
|
15
|
+
"%s: %s\n%s" % [self.class, message, (backtrace || []).join("\n") << "\n"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
puts ">> Dropping collection test"
|
20
|
+
begin
|
21
|
+
res = db.drop_collection('test')
|
22
|
+
puts "dropped : #{res.inspect}"
|
23
|
+
rescue => e
|
24
|
+
puts "Error: #{e.errmsg}"
|
25
|
+
end
|
26
|
+
|
27
|
+
puts ">> Creating collection test"
|
28
|
+
begin
|
29
|
+
coll = db.collection('test')
|
30
|
+
puts "created : #{coll.inspect}"
|
31
|
+
rescue => e
|
32
|
+
puts "Error: #{e.errmsg}"
|
33
|
+
end
|
34
|
+
|
35
|
+
OBJS_COUNT = 100
|
36
|
+
|
37
|
+
puts ">> Generating test data"
|
38
|
+
msgs = %w{hola hello aloha ciao}
|
39
|
+
arr = (0...OBJS_COUNT).collect {|x| { :number => x, :rndm => (rand(5)+1), :msg => msgs[rand(4)] }}
|
40
|
+
puts "generated"
|
41
|
+
|
42
|
+
puts ">> Inserting data (#{arr.size})"
|
43
|
+
coll.insert(arr)
|
44
|
+
puts "inserted"
|
45
|
+
|
46
|
+
puts ">> Creating index"
|
47
|
+
#res = coll.create_index "all", :_id => 1, :number => 1, :rndm => 1, :msg => 1
|
48
|
+
res = coll.create_index [[:number, 1], [:rndm, 1], [:msg, 1]]
|
49
|
+
puts "created index: #{res.inspect}"
|
50
|
+
# ============================ Mongo Log ============================
|
51
|
+
# Fri Dec 5 14:45:02 Adding all existing records for ruby-mongo-console.test to new index
|
52
|
+
# ***
|
53
|
+
# Bad data or size in BSONElement::size()
|
54
|
+
# bad type:30
|
55
|
+
# totalsize:11 fieldnamesize:4
|
56
|
+
# lastrec:
|
57
|
+
# Fri Dec 5 14:45:02 ruby-mongo-console.system.indexes Assertion failure false jsobj.cpp a0
|
58
|
+
# Fri Dec 5 14:45:02 database: ruby-mongo-console op:7d2 0
|
59
|
+
# Fri Dec 5 14:45:02 ns: ruby-mongo-console.system.indexes
|
60
|
+
|
61
|
+
puts ">> Gathering index information"
|
62
|
+
begin
|
63
|
+
res = coll.index_information
|
64
|
+
puts "index_information : #{res.inspect}"
|
65
|
+
rescue => e
|
66
|
+
puts "Error: #{e.errmsg}"
|
67
|
+
end
|
68
|
+
# ============================ Console Output ============================
|
69
|
+
# RuntimeError: Keys for index on return from db was nil. Coll = ruby-mongo-console.test
|
70
|
+
# from ./bin/../lib/mongo/db.rb:135:in `index_information'
|
71
|
+
# from (irb):11:in `collect'
|
72
|
+
# from ./bin/../lib/mongo/cursor.rb:47:in `each'
|
73
|
+
# from ./bin/../lib/mongo/db.rb:130:in `collect'
|
74
|
+
# from ./bin/../lib/mongo/db.rb:130:in `index_information'
|
75
|
+
# from ./bin/../lib/mongo/collection.rb:74:in `index_information'
|
76
|
+
# from (irb):11
|
77
|
+
|
78
|
+
puts ">> Dropping index"
|
79
|
+
begin
|
80
|
+
res = coll.drop_index "number_1_rndm_1_msg_1"
|
81
|
+
puts "dropped : #{res.inspect}"
|
82
|
+
rescue => e
|
83
|
+
puts "Error: #{e.errmsg}"
|
84
|
+
end
|
85
|
+
|
86
|
+
# ============================ Console Output ============================
|
87
|
+
# => {"nIndexesWas"=>2.0, "ok"=>1.0}
|
88
|
+
# ============================ Mongo Log ============================
|
89
|
+
# 0x41802a 0x411549 0x42bac6 0x42c1f6 0x42c55b 0x42e6f7 0x41631e 0x41a89d 0x41ade2 0x41b448 0x4650d2 0x4695ad
|
90
|
+
# db/db(_Z12sayDbContextPKc+0x17a) [0x41802a]
|
91
|
+
# db/db(_Z8assertedPKcS0_j+0x9) [0x411549]
|
92
|
+
# db/db(_ZNK11BSONElement4sizeEv+0x1f6) [0x42bac6]
|
93
|
+
# db/db(_ZN7BSONObj8getFieldEPKc+0xa6) [0x42c1f6]
|
94
|
+
# db/db(_ZN7BSONObj14getFieldDottedEPKc+0x11b) [0x42c55b]
|
95
|
+
# db/db(_ZN7BSONObj19extractFieldsDottedES_R14BSONObjBuilder+0x87) [0x42e6f7]
|
96
|
+
# db/db(_ZN12IndexDetails17getKeysFromObjectER7BSONObjRSt3setIS0_St4lessIS0_ESaIS0_EE+0x24e) [0x41631e]
|
97
|
+
# db/db(_Z12_indexRecordR12IndexDetailsR7BSONObj7DiskLoc+0x5d) [0x41a89d]
|
98
|
+
# db/db(_Z18addExistingToIndexPKcR12IndexDetails+0xb2) [0x41ade2]
|
99
|
+
# db/db(_ZN11DataFileMgr6insertEPKcPKvib+0x508) [0x41b448]
|
100
|
+
# db/db(_Z14receivedInsertR7MessageRSt18basic_stringstreamIcSt11char_traitsIcESaIcEE+0x112) [0x4650d2]
|
101
|
+
# db/db(_Z10connThreadv+0xb4d) [0x4695ad]
|
102
|
+
# Fri Dec 5 14:45:02 ruby-mongo-console.system.indexes Caught Assertion insert, continuing
|
103
|
+
# Fri Dec 5 14:47:59 CMD: deleteIndexes ruby-mongo-console.test
|
104
|
+
# d->nIndexes was 2
|
105
|
+
# alpha implementation, space not reclaimed
|
106
|
+
|
107
|
+
puts ">> Gathering index information"
|
108
|
+
begin
|
109
|
+
res = coll.index_information
|
110
|
+
puts "index_information : #{res.inspect}"
|
111
|
+
rescue => e
|
112
|
+
puts "Error: #{e.errmsg}"
|
113
|
+
end
|
114
|
+
# ============================ Console Output ============================
|
115
|
+
# RuntimeError: Keys for index on return from db was nil. Coll = ruby-mongo-console.test
|
116
|
+
# from ./bin/../lib/mongo/db.rb:135:in `index_information'
|
117
|
+
# from (irb):15:in `collect'
|
118
|
+
# from ./bin/../lib/mongo/cursor.rb:47:in `each'
|
119
|
+
# from ./bin/../lib/mongo/db.rb:130:in `collect'
|
120
|
+
# from ./bin/../lib/mongo/db.rb:130:in `index_information'
|
121
|
+
# from ./bin/../lib/mongo/collection.rb:74:in `index_information'
|
122
|
+
# from (irb):15
|
123
|
+
|
124
|
+
puts ">> Closing connection"
|
125
|
+
db.close
|
126
|
+
puts "closed"
|