jmongo 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/README.txt +33 -82
- data/jmongo.gemspec +2 -3
- data/lib/jmongo/collection.rb +4 -7
- data/lib/jmongo/mongo/collection.rb +4 -4
- data/lib/jmongo/mongo/db.rb +18 -1
- data/lib/jmongo/mongo/utils.rb +1 -19
- data/lib/jmongo/version.rb +1 -1
- metadata +29 -27
- data/test-results.txt +0 -98
data/Gemfile.lock
CHANGED
data/README.txt
CHANGED
@@ -6,92 +6,43 @@ lifting. Unfortunately, the performance of the pure ruby path under jruby is les
|
|
6
6
|
stellar. Additionally, the C extension isn't compatible with jruby so we aren't able to take
|
7
7
|
advantage of any native code boost.
|
8
8
|
|
9
|
-
JMongo solves this problem by putting a thin ruby wrapper around the mongo-java-driver. The
|
9
|
+
JMongo solves this problem by putting a thin ruby wrapper around the 10gen mongo-java-driver. The
|
10
10
|
goal is to provide a drop-in replacement for the mongo and bson gems along with complete
|
11
11
|
API compatibility.
|
12
12
|
|
13
|
-
The
|
14
|
-
I encourage project forking.
|
13
|
+
The repo was was forked from Chuck Remes's (now deleted) repo.
|
15
14
|
|
16
|
-
INSTALLATION
|
17
|
-
% gem
|
18
|
-
% gem install jmongo-0.1.0.gem
|
15
|
+
INSTALLATION (from Rubygems.org)
|
16
|
+
% gem install jmongo
|
19
17
|
|
18
|
+
USAGE
|
19
|
+
* Use jruby with 1.9 compatibility turned on JRUBY_OPTS='--1.9'
|
20
20
|
|
21
21
|
PROGRESS
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
require 'rubygems'
|
51
|
-
require 'jmongo'
|
52
|
-
#require 'mongo'
|
53
|
-
require 'benchmark'
|
54
|
-
n = 500
|
55
|
-
db = Mongo::Connection.new('127.0.0.1',37037).db('bm')
|
56
|
-
coll = db.collection('bm')
|
57
|
-
ids = []
|
58
|
-
docs = []
|
59
|
-
Benchmark.bm do |x|
|
60
|
-
x.report("inserts:") do
|
61
|
-
for i in 1..n
|
62
|
-
d = {'n'=>i}
|
63
|
-
ids << coll.insert(d)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
x.report("updates:") do
|
67
|
-
ids.each do |id|
|
68
|
-
coll.update({'_id'=>id},{'$set'=>{'a'=>'blah'}})
|
69
|
-
end
|
70
|
-
end
|
71
|
-
s = {'n'=>{'$gt'=>0}}
|
72
|
-
coll.find(s).each{|d| }
|
73
|
-
coll.find(s).each{|d| }
|
74
|
-
c = coll.find(s)
|
75
|
-
x.report("after find all, iterate:") do
|
76
|
-
c.each do |d|
|
77
|
-
docs << d
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
db.drop_collection('bm')
|
82
|
-
|
83
|
-
Results
|
84
|
-
|
85
|
-
ruby --fast --server mongo_bm.rb
|
86
|
-
user system total real
|
87
|
-
inserts: 0.879000 0.000000 0.879000 ( 0.878000)
|
88
|
-
updates: 0.711000 0.000000 0.711000 ( 0.711000)
|
89
|
-
after find all, iterate: 0.243000 0.000000 0.243000 ( 0.243000)
|
90
|
-
|
91
|
-
ruby --fast --server jmongo_bm.rb
|
92
|
-
user system total real
|
93
|
-
inserts: 0.489000 0.000000 0.489000 ( 0.489000)
|
94
|
-
updates: 0.357000 0.000000 0.357000 ( 0.357000)
|
95
|
-
after find all, iterate: 0.058000 0.000000 0.058000 ( 0.058000)
|
96
|
-
|
97
|
-
|
22
|
+
Almost all of the Ruby driver API is implemented
|
23
|
+
|
24
|
+
The the Ruby driver tests have been brought over and converted to be MiniTest based and
|
25
|
+
the collection and cursor test suites pass. NOTE: a few (2/3) tests have been skipped, you should look at
|
26
|
+
them to see if they affect you.
|
27
|
+
|
28
|
+
The Mongoid rspec functional suite runs 2607 examples with 28 failures when using JMongo
|
29
|
+
My Mongoid repo was forked after this commit (so newer funtionality/spec will be missing)
|
30
|
+
commit 6cc97092bc10535b8b65647a3d14b10ca1b94c8c
|
31
|
+
Author: Bernerd Schaefer <bj.schaefer@gmail.com>
|
32
|
+
Date: Tue Jun 28 12:59:34 2011 +0200
|
33
|
+
|
34
|
+
The failures are classed in this way:
|
35
|
+
* Different Exception class being raised for BSON invalid keys
|
36
|
+
* Managing Replica Sets directly
|
37
|
+
* Managing Connection Pools directly
|
38
|
+
* XML serialization
|
39
|
+
* Ruby RegExp to BSON encode and decode
|
40
|
+
|
41
|
+
I will fix these problems in due course
|
42
|
+
|
43
|
+
Please note that the java driver handles the Replica Sets and connection pools
|
44
|
+
If you are using Replica Sets and want to use JMongo you should be OK if you use a URI to connect.
|
45
|
+
JMongo lets the Java driver handle reading from slaves and writing to master, although YMMV as I have not
|
46
|
+
tested JMongo with Replica Sets yet.
|
47
|
+
If you intend to use the fsync=true uri option to imply safe=true on your queries, at the moment you will also
|
48
|
+
need to specify the w option in the uri. e.g. mongodb://0.0.0.0:27017/?fsync=true;w=1;
|
data/jmongo.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'jmongo'
|
3
|
-
s.version = '1.1.
|
4
|
-
s.date = '2011-10-
|
3
|
+
s.version = '1.1.1'
|
4
|
+
s.date = '2011-10-06'
|
5
5
|
s.platform = Gem::Platform::RUBY
|
6
6
|
s.authors = ["Chuck Remes","Guy Boertje", "Lee Henson"]
|
7
7
|
s.email = ["cremes@mac.com", "guyboertje@gmail.com", "lee.m.henson@gmail.com"]
|
@@ -37,7 +37,6 @@ Gem::Specification.new do |s|
|
|
37
37
|
lib/jmongo/version.rb
|
38
38
|
spec/jmongo_spec.rb
|
39
39
|
spec/spec_helper.rb
|
40
|
-
test-results.txt
|
41
40
|
test/auxillary/1.4_features.rb
|
42
41
|
test/auxillary/authentication_test.rb
|
43
42
|
test/auxillary/autoreconnect_test.rb
|
data/lib/jmongo/collection.rb
CHANGED
@@ -219,7 +219,7 @@ module Mongo
|
|
219
219
|
# will be raised on an error. Note that a safe check requires an extra
|
220
220
|
# round-trip to the database.
|
221
221
|
def save(doc, options={})
|
222
|
-
save_document(doc,
|
222
|
+
save_document(doc, options[:safe])
|
223
223
|
end
|
224
224
|
|
225
225
|
# Insert one or more documents into the collection.
|
@@ -240,9 +240,8 @@ module Mongo
|
|
240
240
|
def insert(doc_or_docs, options={})
|
241
241
|
doc_or_docs = [doc_or_docs] unless doc_or_docs.kind_of?(Array)
|
242
242
|
doc_or_docs.collect! { |doc| @pk_factory.create_pk(doc) }
|
243
|
-
safe = (options[:safe] || false)
|
244
243
|
continue = (options[:continue_on_error] || false)
|
245
|
-
docs = insert_documents(doc_or_docs, safe, continue)
|
244
|
+
docs = insert_documents(doc_or_docs, options[:safe], continue)
|
246
245
|
docs.size == 1 ? docs.first['_id'] : docs.collect{|doc| doc['_id']}
|
247
246
|
end
|
248
247
|
alias_method :<<, :insert
|
@@ -269,8 +268,7 @@ module Mongo
|
|
269
268
|
#
|
270
269
|
# @core remove remove-instance_method
|
271
270
|
def remove(selector={}, options={})
|
272
|
-
|
273
|
-
remove_documents(selector,safe)
|
271
|
+
remove_documents(selector,options[:safe])
|
274
272
|
end
|
275
273
|
|
276
274
|
# Update a single document in this collection.
|
@@ -295,8 +293,7 @@ module Mongo
|
|
295
293
|
# @core update update-instance_method
|
296
294
|
def update(selector, document, options={})
|
297
295
|
upsert, multi = !!(options[:upsert]), !!(options[:multi])
|
298
|
-
|
299
|
-
update_documents(selector, document, upsert, multi, safe)
|
296
|
+
update_documents(selector, document, upsert, multi, options[:safe])
|
300
297
|
end
|
301
298
|
|
302
299
|
# Create a new index.
|
@@ -76,7 +76,7 @@ module Mongo
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def remove_documents(obj, safe=nil)
|
79
|
-
concern = write_concern(safe)
|
79
|
+
concern = @db.write_concern(safe)
|
80
80
|
wr = @j_collection.remove(to_dbobject(obj), concern)
|
81
81
|
return from_dbobject(wr.last_error(concern)) if concern.call_get_last_error
|
82
82
|
true
|
@@ -85,7 +85,7 @@ module Mongo
|
|
85
85
|
## Note: refactor when java driver fully supports continue_on_error
|
86
86
|
def insert_documents(obj, safe=nil, continue_on_error=false)
|
87
87
|
to_do = [obj].flatten
|
88
|
-
concern = write_concern(safe)
|
88
|
+
concern = @db.write_concern(safe)
|
89
89
|
if continue_on_error
|
90
90
|
out = []
|
91
91
|
to_do.each do |doc|
|
@@ -145,7 +145,7 @@ module Mongo
|
|
145
145
|
|
146
146
|
def update_documents(selector, document, upsert=false, multi=false, safe=nil)
|
147
147
|
begin
|
148
|
-
@j_collection.update(to_dbobject(selector),to_dbobject(document), upsert, multi, write_concern(safe))
|
148
|
+
@j_collection.update(to_dbobject(selector),to_dbobject(document), upsert, multi, @db.write_concern(safe))
|
149
149
|
rescue => ex
|
150
150
|
if ex.message =~ /E11001/
|
151
151
|
msg = "Failed to update document #{document.inspect}, duplicate key"
|
@@ -160,7 +160,7 @@ module Mongo
|
|
160
160
|
def save_document(obj, safe=nil)
|
161
161
|
@pk_factory.create_pk(obj)
|
162
162
|
db_obj = to_dbobject(obj)
|
163
|
-
concern = write_concern(safe)
|
163
|
+
concern = @db.write_concern(safe)
|
164
164
|
begin
|
165
165
|
@j_collection.save( db_obj, concern )
|
166
166
|
rescue => ex
|
data/lib/jmongo/mongo/db.rb
CHANGED
@@ -6,6 +6,24 @@ module Mongo
|
|
6
6
|
SYSTEM_NAMESPACE_COLLECTION = "system.namespaces"
|
7
7
|
SYSTEM_PROFILE_COLLECTION = "system.profile"
|
8
8
|
|
9
|
+
#@collection.save({:doc => 'foo'}, :safe => nil) ---> NONE = new WriteConcern(-1)
|
10
|
+
#@collection.save({:doc => 'foo'}, :safe => true) ---> NORMAL = new WriteConcern(0)
|
11
|
+
#@collection.save({:doc => 'foo'}, :safe => {:w => 2}) ---> new WriteConcern( 2 , 0 , false)
|
12
|
+
#@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200}) ---> new WriteConcern( 2 , 200 , false)
|
13
|
+
#@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200, :fsync => true}) ---> new WriteConcern( 2 , 0 , true)
|
14
|
+
#@collection.save({:doc => 'foo'}, :safe => {:fsync => true}) ---> FSYNC_SAFE = new WriteConcern( 1 , 0 , true)
|
15
|
+
|
16
|
+
def write_concern(safe)
|
17
|
+
return @j_db.write_concern if safe.nil?
|
18
|
+
return JMongo::WriteConcern.new(0) if safe.is_a?(FalseClass)
|
19
|
+
return JMongo::WriteConcern.new(1) if safe.is_a?(TrueClass)
|
20
|
+
return JMongo::WriteConcern.new(0) unless safe.is_a?(Hash)
|
21
|
+
w = safe[:w] || 1
|
22
|
+
t = safe[:wtimeout] || 0
|
23
|
+
f = !!(safe[:fsync] || false)
|
24
|
+
JMongo::WriteConcern.new(w, t, f) #dont laugh!
|
25
|
+
end
|
26
|
+
|
9
27
|
private
|
10
28
|
|
11
29
|
def exec_command(cmd)
|
@@ -25,7 +43,6 @@ module Mongo
|
|
25
43
|
def get_last_error
|
26
44
|
from_dbobject @j_db.get_last_error
|
27
45
|
end
|
28
|
-
|
29
46
|
end
|
30
47
|
end
|
31
48
|
end
|
data/lib/jmongo/mongo/utils.rb
CHANGED
@@ -62,7 +62,7 @@ module Mongo
|
|
62
62
|
|
63
63
|
def from_dbobject obj
|
64
64
|
# for better upstream compatibility make the objects into ruby hash or array
|
65
|
-
|
65
|
+
|
66
66
|
case obj
|
67
67
|
when Java::ComMongodb::BasicDBObject, Java::ComMongodb::CommandResult
|
68
68
|
h = obj.hashify
|
@@ -113,24 +113,6 @@ module Mongo
|
|
113
113
|
end
|
114
114
|
list
|
115
115
|
end
|
116
|
-
|
117
|
-
#@collection.save({:doc => 'foo'}, :safe => nil) ---> NONE = new WriteConcern(-1)
|
118
|
-
#@collection.save({:doc => 'foo'}, :safe => true) ---> NORMAL = new WriteConcern(0)
|
119
|
-
#@collection.save({:doc => 'foo'}, :safe => {:w => 2}) ---> new WriteConcern( 2 , 0 , false)
|
120
|
-
#@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200}) ---> new WriteConcern( 2 , 200 , false)
|
121
|
-
#@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200, :fsync => true}) ---> new WriteConcern( 2 , 0 , true)
|
122
|
-
#@collection.save({:doc => 'foo'}, :safe => {:fsync => true}) ---> FSYNC_SAFE = new WriteConcern( 1 , 0 , true)
|
123
|
-
|
124
|
-
def write_concern(safe)
|
125
|
-
return JMongo::WriteConcern.new(-1) if safe.nil?
|
126
|
-
return JMongo::WriteConcern.new(0) if safe.is_a?(FalseClass)
|
127
|
-
return JMongo::WriteConcern.new(1) if safe.is_a?(TrueClass)
|
128
|
-
return JMongo::WriteConcern.new(0) unless safe.is_a?(Hash)
|
129
|
-
w = safe[:w] || 1
|
130
|
-
t = safe[:wtimeout] || 0
|
131
|
-
f = !!(safe[:fsync] || false)
|
132
|
-
JMongo::WriteConcern.new(w, t, f) #dont laugh!
|
133
|
-
end
|
134
116
|
end
|
135
117
|
end
|
136
118
|
end
|
data/lib/jmongo/version.rb
CHANGED
metadata
CHANGED
@@ -1,62 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jmongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 1.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Chuck Remes
|
9
9
|
- Guy Boertje
|
10
10
|
- Lee Henson
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2011-10-
|
14
|
+
date: 2011-10-06 00:00:00.000000000 +01:00
|
15
|
+
default_executable:
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: require_all
|
18
|
-
|
19
|
-
none: false
|
19
|
+
version_requirements: &2202 !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: '1.2'
|
24
|
-
|
24
|
+
none: false
|
25
|
+
requirement: *2202
|
25
26
|
prerelease: false
|
26
|
-
|
27
|
+
type: :runtime
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: awesome_print
|
29
|
-
|
30
|
-
none: false
|
30
|
+
version_requirements: &2220 !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0.4'
|
35
|
-
|
35
|
+
none: false
|
36
|
+
requirement: *2220
|
36
37
|
prerelease: false
|
37
|
-
|
38
|
+
type: :development
|
38
39
|
- !ruby/object:Gem::Dependency
|
39
40
|
name: fuubar
|
40
|
-
|
41
|
-
none: false
|
41
|
+
version_requirements: &2238 !ruby/object:Gem::Requirement
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0.0'
|
46
|
-
|
46
|
+
none: false
|
47
|
+
requirement: *2238
|
47
48
|
prerelease: false
|
48
|
-
|
49
|
+
type: :development
|
49
50
|
- !ruby/object:Gem::Dependency
|
50
51
|
name: rspec
|
51
|
-
|
52
|
-
none: false
|
52
|
+
version_requirements: &2254 !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '2.6'
|
57
|
-
|
57
|
+
none: false
|
58
|
+
requirement: *2254
|
58
59
|
prerelease: false
|
59
|
-
|
60
|
+
type: :development
|
60
61
|
description: Thin jruby wrapper around Mongo Java Driver
|
61
62
|
email:
|
62
63
|
- cremes@mac.com
|
@@ -93,7 +94,6 @@ files:
|
|
93
94
|
- lib/jmongo/version.rb
|
94
95
|
- spec/jmongo_spec.rb
|
95
96
|
- spec/spec_helper.rb
|
96
|
-
- test-results.txt
|
97
97
|
- test/auxillary/1.4_features.rb
|
98
98
|
- test/auxillary/authentication_test.rb
|
99
99
|
- test/auxillary/autoreconnect_test.rb
|
@@ -164,28 +164,30 @@ files:
|
|
164
164
|
- test/unit/read_test.rb
|
165
165
|
- test/unit/safe_test.rb
|
166
166
|
- test/uri_test.rb
|
167
|
+
has_rdoc: true
|
167
168
|
homepage: http://github.com/guyboertje/jmongo
|
168
169
|
licenses: []
|
169
|
-
post_install_message:
|
170
|
+
post_install_message:
|
170
171
|
rdoc_options: []
|
171
172
|
require_paths:
|
172
173
|
- lib
|
173
174
|
required_ruby_version: !ruby/object:Gem::Requirement
|
174
|
-
none: false
|
175
175
|
requirements:
|
176
176
|
- - ! '>='
|
177
177
|
- !ruby/object:Gem::Version
|
178
178
|
version: '0'
|
179
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
179
|
none: false
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
181
|
requirements:
|
182
182
|
- - ! '>='
|
183
183
|
- !ruby/object:Gem::Version
|
184
184
|
version: '0'
|
185
|
+
none: false
|
185
186
|
requirements: []
|
186
|
-
rubyforge_project:
|
187
|
-
rubygems_version: 1.
|
188
|
-
signing_key:
|
187
|
+
rubyforge_project:
|
188
|
+
rubygems_version: 1.5.1
|
189
|
+
signing_key:
|
189
190
|
specification_version: 3
|
190
191
|
summary: Thin ruby wrapper around Mongo Java Driver; for JRuby only
|
191
192
|
test_files: []
|
193
|
+
...
|
data/test-results.txt
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
Loaded suite ./test/collection_test
|
2
|
-
Started
|
3
|
-
"test_map_reduce_with_raw_response"
|
4
|
-
"function() { emit(this.user_id, 1); }"
|
5
|
-
"function(k,vals) { return 1; }"
|
6
|
-
{
|
7
|
-
"result" => "foo",
|
8
|
-
"timeMillis" => 18,
|
9
|
-
"timing" => {
|
10
|
-
"mapTime" => 0,
|
11
|
-
"emitLoop" => 17,
|
12
|
-
"total" => 18
|
13
|
-
},
|
14
|
-
"counts" => {
|
15
|
-
"input" => 3,
|
16
|
-
"emit" => 3,
|
17
|
-
"output" => 3
|
18
|
-
},
|
19
|
-
"ok" => 1.0
|
20
|
-
}
|
21
|
-
........."test_map_reduce_with_output_collection"
|
22
|
-
"function() { emit(this.user_id, 1); }"
|
23
|
-
"function(k,vals) { return 1; }"
|
24
|
-
{
|
25
|
-
"result" => "test-map-coll",
|
26
|
-
"timeMillis" => 1,
|
27
|
-
"timing" => {
|
28
|
-
"mapTime" => 0,
|
29
|
-
"emitLoop" => 0,
|
30
|
-
"total" => 1
|
31
|
-
},
|
32
|
-
"counts" => {
|
33
|
-
"input" => 3,
|
34
|
-
"emit" => 3,
|
35
|
-
"output" => 3
|
36
|
-
},
|
37
|
-
"ok" => 1.0
|
38
|
-
}
|
39
|
-
....."test_map_reduce_with_code_objects"
|
40
|
-
"function() { emit(this.user_id, 1); }"
|
41
|
-
"function(k,vals) { return 1; }"
|
42
|
-
{
|
43
|
-
"result" => "foo",
|
44
|
-
"timeMillis" => 1,
|
45
|
-
"timing" => {
|
46
|
-
"mapTime" => 0,
|
47
|
-
"emitLoop" => 0,
|
48
|
-
"total" => 1
|
49
|
-
},
|
50
|
-
"counts" => {
|
51
|
-
"input" => 2,
|
52
|
-
"emit" => 2,
|
53
|
-
"output" => 2
|
54
|
-
},
|
55
|
-
"ok" => 1.0
|
56
|
-
}
|
57
|
-
..."test_map_reduce_with_options"
|
58
|
-
"function() { emit(this.user_id, 1); }"
|
59
|
-
"function(k,vals) { return 1; }"
|
60
|
-
{
|
61
|
-
"result" => "foo",
|
62
|
-
"timeMillis" => 1,
|
63
|
-
"timing" => {
|
64
|
-
"mapTime" => 0,
|
65
|
-
"emitLoop" => 0,
|
66
|
-
"total" => 1
|
67
|
-
},
|
68
|
-
"counts" => {
|
69
|
-
"input" => 2,
|
70
|
-
"emit" => 2,
|
71
|
-
"output" => 2
|
72
|
-
},
|
73
|
-
"ok" => 1.0
|
74
|
-
}
|
75
|
-
.."test_map_reduce"
|
76
|
-
"function() { emit(this.user_id, 1); }"
|
77
|
-
"function(k,vals) { return 1; }"
|
78
|
-
{
|
79
|
-
"result" => "foo",
|
80
|
-
"timeMillis" => 1,
|
81
|
-
"timing" => {
|
82
|
-
"mapTime" => 0,
|
83
|
-
"emitLoop" => 0,
|
84
|
-
"total" => 1
|
85
|
-
},
|
86
|
-
"counts" => {
|
87
|
-
"input" => 2,
|
88
|
-
"emit" => 2,
|
89
|
-
"output" => 2
|
90
|
-
},
|
91
|
-
"ok" => 1.0
|
92
|
-
}
|
93
|
-
..............
|
94
|
-
Finished in 0.304000 seconds.
|
95
|
-
|
96
|
-
33 tests, 94 assertions, 0 failures, 0 errors, 0 skips
|
97
|
-
|
98
|
-
Test run options: --seed 45344
|