jmongo 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|