mongoid 7.2.5 → 7.3.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +1 -1
- data/Rakefile +16 -0
- data/lib/config/locales/en.yml +2 -2
- data/lib/mongoid/association/accessors.rb +1 -1
- data/lib/mongoid/association/constrainable.rb +1 -1
- data/lib/mongoid/association/depending.rb +4 -4
- data/lib/mongoid/association/embedded/batchable.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +11 -4
- data/lib/mongoid/association/nested/many.rb +1 -1
- data/lib/mongoid/association/nested/one.rb +4 -2
- data/lib/mongoid/association/proxy.rb +7 -2
- data/lib/mongoid/association/referenced/auto_save.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +493 -495
- data/lib/mongoid/association/referenced/has_many/proxy.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +2 -2
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes.rb +24 -13
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/clients/factory.rb +22 -8
- data/lib/mongoid/clients.rb +1 -1
- data/lib/mongoid/config.rb +19 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +10 -8
- data/lib/mongoid/copyable.rb +1 -1
- data/lib/mongoid/criteria/findable.rb +1 -1
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -24
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +46 -20
- data/lib/mongoid/criteria/queryable/selectable.rb +8 -8
- data/lib/mongoid/criteria.rb +5 -6
- data/lib/mongoid/document.rb +1 -15
- data/lib/mongoid/errors/delete_restriction.rb +8 -9
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions/boolean.rb +1 -2
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +2 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/fields.rb +43 -5
- data/lib/mongoid/inspectable.rb +1 -1
- data/lib/mongoid/interceptable.rb +1 -1
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/expression.rb +4 -0
- data/lib/mongoid/matcher/field_operator.rb +6 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +7 -0
- data/lib/mongoid/persistable/deletable.rb +1 -2
- data/lib/mongoid/persistable/destroyable.rb +8 -2
- data/lib/mongoid/persistable/updatable.rb +27 -2
- data/lib/mongoid/query_cache.rb +35 -29
- data/lib/mongoid/selectable.rb +5 -7
- data/lib/mongoid/shardable.rb +21 -5
- data/lib/mongoid/touchable.rb +23 -4
- data/lib/mongoid/validatable/associated.rb +1 -1
- data/lib/mongoid/validatable/presence.rb +3 -3
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +0 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
- data/spec/integration/app_spec.rb +0 -3
- data/spec/integration/associations/embeds_many_spec.rb +44 -0
- data/spec/integration/associations/has_one_spec.rb +48 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -1
- data/spec/integration/document_spec.rb +9 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/in.yml +16 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/lite_spec_helper.rb +2 -0
- data/spec/mongoid/association/depending_spec.rb +391 -352
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4 -17
- data/spec/mongoid/association/nested/one_spec.rb +18 -14
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +25 -25
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +8 -0
- data/spec/mongoid/atomic/paths_spec.rb +64 -12
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +41 -0
- data/spec/mongoid/attributes_spec.rb +98 -6
- data/spec/mongoid/clients/factory_spec.rb +48 -0
- data/spec/mongoid/clients/options_spec.rb +0 -2
- data/spec/mongoid/config_spec.rb +32 -0
- data/spec/mongoid/contextual/mongo_spec.rb +2 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -73
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +105 -7
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +229 -24
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -565
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria_projection_spec.rb +411 -0
- data/spec/mongoid/criteria_spec.rb +0 -279
- data/spec/mongoid/document_query_spec.rb +0 -51
- data/spec/mongoid/document_spec.rb +13 -13
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
- data/spec/mongoid/extensions/false_class_spec.rb +1 -1
- data/spec/mongoid/extensions/string_spec.rb +5 -5
- data/spec/mongoid/extensions/true_class_spec.rb +1 -1
- data/spec/mongoid/fields/localized_spec.rb +4 -4
- data/spec/mongoid/fields_spec.rb +4 -4
- data/spec/mongoid/inspectable_spec.rb +12 -4
- data/spec/mongoid/persistable/deletable_spec.rb +175 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +191 -3
- data/spec/mongoid/persistable/savable_spec.rb +3 -5
- data/spec/mongoid/persistable/upsertable_spec.rb +1 -1
- data/spec/mongoid/persistable_spec.rb +2 -2
- data/spec/mongoid/query_cache_middleware_spec.rb +8 -0
- data/spec/mongoid/reloadable_spec.rb +18 -1
- data/spec/mongoid/shardable_spec.rb +44 -0
- data/spec/mongoid/touchable_spec.rb +104 -16
- data/spec/mongoid/touchable_spec_models.rb +52 -0
- data/spec/mongoid/validatable_spec.rb +1 -1
- data/spec/shared/lib/mrss/cluster_config.rb +3 -8
- data/spec/shared/lib/mrss/constraints.rb +6 -20
- data/spec/shared/lib/mrss/docker_runner.rb +1 -7
- data/spec/shared/lib/mrss/spec_organizer.rb +1 -18
- data/spec/shared/share/Dockerfile.erb +30 -121
- data/spec/shared/shlib/server.sh +4 -31
- data/spec/shared/shlib/set_env.sh +1 -4
- data/spec/spec_helper.rb +7 -3
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/models/address.rb +0 -4
- data/spec/support/models/bolt.rb +8 -0
- data/spec/support/models/hole.rb +13 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/nut.rb +8 -0
- data/spec/support/models/person.rb +6 -9
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/shirt.rb +12 -0
- data/spec/support/models/spacer.rb +8 -0
- data/spec/support/models/threadlocker.rb +8 -0
- data/spec/support/models/washer.rb +8 -0
- data.tar.gz.sig +0 -0
- metadata +616 -544
- metadata.gz.sig +0 -0
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/support/cluster_config.rb +0 -158
data/lib/mongoid/shardable.rb
CHANGED
|
@@ -52,15 +52,31 @@ module Mongoid
|
|
|
52
52
|
self.class.shard_key_fields
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
# @example Get the selector for the shard keys.
|
|
58
|
-
# person.shard_key_selector
|
|
55
|
+
# Returns the selector that would match the current version of this
|
|
56
|
+
# document.
|
|
59
57
|
#
|
|
60
58
|
# @return [ Hash ] The shard key selector.
|
|
61
59
|
#
|
|
62
|
-
# @
|
|
60
|
+
# @api private
|
|
63
61
|
def shard_key_selector
|
|
62
|
+
selector = {}
|
|
63
|
+
shard_key_fields.each do |field|
|
|
64
|
+
selector[field.to_s] = send(field)
|
|
65
|
+
end
|
|
66
|
+
selector
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Returns the selector that would match the existing version of this
|
|
70
|
+
# document in the database.
|
|
71
|
+
#
|
|
72
|
+
# If the document is not persisted, this method uses the current values
|
|
73
|
+
# of the shard key fields. If the document is persisted, this method
|
|
74
|
+
# uses the values retrieved from the database.
|
|
75
|
+
#
|
|
76
|
+
# @return [ Hash ] The shard key selector.
|
|
77
|
+
#
|
|
78
|
+
# @api private
|
|
79
|
+
def shard_key_selector_in_db
|
|
64
80
|
selector = {}
|
|
65
81
|
shard_key_fields.each do |field|
|
|
66
82
|
selector[field.to_s] = new_record? ? send(field) : attribute_was(field)
|
data/lib/mongoid/touchable.rb
CHANGED
|
@@ -30,11 +30,30 @@ module Mongoid
|
|
|
30
30
|
write_attribute(:updated_at, current) if respond_to?("updated_at=")
|
|
31
31
|
write_attribute(field, current) if field
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
# If the document being touched is embedded, touch its parents
|
|
34
|
+
# all the way through the composition hierarchy to the root object,
|
|
35
|
+
# because when an embedded document is changed the write is actually
|
|
36
|
+
# performed by the composition root. See MONGOID-3468.
|
|
37
|
+
if _parent
|
|
38
|
+
# This will persist updated_at on this document as well as parents.
|
|
39
|
+
# TODO support passing the field name to the parent's touch method;
|
|
40
|
+
# I believe it should be read out of
|
|
41
|
+
# _association.inverse_association.options but inverse_association
|
|
42
|
+
# seems to not always/ever be set here. See MONGOID-5014.
|
|
43
|
+
_parent.touch
|
|
44
|
+
else
|
|
45
|
+
# If the current document is not embedded, it is composition root
|
|
46
|
+
# and we need to persist the write here.
|
|
47
|
+
touches = touch_atomic_updates(field)
|
|
48
|
+
unless touches["$set"].blank?
|
|
49
|
+
selector = atomic_selector
|
|
50
|
+
_root.collection.find(selector).update_one(positionally(selector, touches), session: _session)
|
|
51
|
+
end
|
|
37
52
|
end
|
|
53
|
+
|
|
54
|
+
# Callbacks are invoked on the composition root first and on the
|
|
55
|
+
# leaf-most embedded document last.
|
|
56
|
+
# TODO add tests, see MONGOID-5015.
|
|
38
57
|
run_callbacks(:touch)
|
|
39
58
|
true
|
|
40
59
|
end
|
|
@@ -34,15 +34,15 @@ module Mongoid
|
|
|
34
34
|
document.errors.add(
|
|
35
35
|
attribute,
|
|
36
36
|
:blank_in_locale,
|
|
37
|
-
|
|
37
|
+
options.merge(location: _locale)
|
|
38
38
|
) if not_present?(_value)
|
|
39
39
|
end
|
|
40
40
|
elsif document.relations.has_key?(attribute.to_s)
|
|
41
41
|
if relation_or_fk_missing?(document, attribute, value)
|
|
42
|
-
document.errors.add(attribute, :blank,
|
|
42
|
+
document.errors.add(attribute, :blank, options)
|
|
43
43
|
end
|
|
44
44
|
else
|
|
45
|
-
document.errors.add(attribute, :blank,
|
|
45
|
+
document.errors.add(attribute, :blank, options) if not_present?(value)
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -68,7 +68,7 @@ module Mongoid
|
|
|
68
68
|
# @since 2.4.10
|
|
69
69
|
def add_error(document, attribute, value)
|
|
70
70
|
document.errors.add(
|
|
71
|
-
attribute, :taken,
|
|
71
|
+
attribute, :taken, options.except(:case_sensitive, :scope).merge(value: value)
|
|
72
72
|
)
|
|
73
73
|
end
|
|
74
74
|
|
data/lib/mongoid/version.rb
CHANGED
data/lib/mongoid.rb
CHANGED
|
@@ -57,7 +57,7 @@ development:
|
|
|
57
57
|
# connect: :direct
|
|
58
58
|
|
|
59
59
|
# Changes the default time in seconds the server monitors refresh their status
|
|
60
|
-
# via
|
|
60
|
+
# via ismaster commands. (default: 10)
|
|
61
61
|
# heartbeat_frequency: 10
|
|
62
62
|
|
|
63
63
|
# The time in seconds for selecting servers for a near read preference. (default: 0.015)
|
|
@@ -297,9 +297,6 @@ describe 'Mongoid application tests' do
|
|
|
297
297
|
end
|
|
298
298
|
|
|
299
299
|
def remove_bundler_req
|
|
300
|
-
return unless File.file?('Gemfile.lock')
|
|
301
|
-
# TODO: Remove this method completely when we get rid of .lock files in
|
|
302
|
-
# mongoid-demo apps.
|
|
303
300
|
lock_lines = IO.readlines('Gemfile.lock')
|
|
304
301
|
# Get rid of the bundled with line so that whatever bundler is installed
|
|
305
302
|
# on the system is usable with the application.
|
|
@@ -21,4 +21,48 @@ describe 'embeds_many associations' do
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
|
+
|
|
25
|
+
context 'clearing association when parent is not saved' do
|
|
26
|
+
let!(:parent) { Canvas.create!(shapes: [Shape.new]) }
|
|
27
|
+
|
|
28
|
+
let(:unsaved_parent) { Canvas.new(id: parent.id, shapes: [Shape.new]) }
|
|
29
|
+
|
|
30
|
+
context "using #clear" do
|
|
31
|
+
it 'deletes the target from the database' do
|
|
32
|
+
unsaved_parent.shapes.clear
|
|
33
|
+
|
|
34
|
+
unsaved_parent.shapes.should be_empty
|
|
35
|
+
|
|
36
|
+
unsaved_parent.new_record?.should be true
|
|
37
|
+
parent.reload
|
|
38
|
+
parent.shapes.should be_empty
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
shared_examples 'does not delete the target from the database' do
|
|
43
|
+
it 'does not delete the target from the database' do
|
|
44
|
+
unsaved_parent.shapes.should be_empty
|
|
45
|
+
|
|
46
|
+
unsaved_parent.new_record?.should be true
|
|
47
|
+
parent.reload
|
|
48
|
+
parent.shapes.length.should == 1
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "using #delete_all" do
|
|
53
|
+
before do
|
|
54
|
+
unsaved_parent.shapes.delete_all
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
include_examples 'does not delete the target from the database'
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
context "using #destroy_all" do
|
|
61
|
+
before do
|
|
62
|
+
unsaved_parent.shapes.destroy_all
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
include_examples 'does not delete the target from the database'
|
|
66
|
+
end
|
|
67
|
+
end
|
|
24
68
|
end
|
|
@@ -67,6 +67,54 @@ describe 'has_one associations' do
|
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
+
context 'when calling methods on target' do
|
|
71
|
+
let(:parent) do
|
|
72
|
+
HomCollege.create!.tap do |college|
|
|
73
|
+
HomAccreditation.create!(college: college)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
shared_examples 'delegates to the field' do |reloaded: false|
|
|
78
|
+
context 'non-conflicting field name' do
|
|
79
|
+
it 'delegates to the field' do
|
|
80
|
+
parent.accreditation.price.should == 42
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
context 'using send' do
|
|
84
|
+
it 'delegates to the field' do
|
|
85
|
+
parent.accreditation.send(:price).should == 42
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
context 'field name that conflicts with Kernel' do
|
|
91
|
+
it 'delegates to the field' do
|
|
92
|
+
parent.accreditation.format.should == 'fmt'
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context 'using send' do
|
|
96
|
+
it 'delegates to the field' do
|
|
97
|
+
if reloaded
|
|
98
|
+
pending 'MONGOID-4018'
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
parent.accreditation.send(:format).should == 'fmt'
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
include_examples 'delegates to the field'
|
|
108
|
+
|
|
109
|
+
context 'after reloading parent' do
|
|
110
|
+
before do
|
|
111
|
+
parent.reload
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
include_examples 'delegates to the field', reloaded: true
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
70
118
|
context 'when child does not have parent association' do
|
|
71
119
|
context 'Child.new' do
|
|
72
120
|
it 'creates a child instance' do
|
|
@@ -12,7 +12,7 @@ describe 'Queries on Date fields' do
|
|
|
12
12
|
|
|
13
13
|
shared_examples 'converts to beginning of day in UTC' do
|
|
14
14
|
it 'converts to beginning of day in UTC' do
|
|
15
|
-
selector['founded'].should == arg.
|
|
15
|
+
selector['founded'].should == Time.utc(arg.year, arg.month, arg.day)
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -20,6 +20,15 @@ describe Mongoid::Document do
|
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
context 'when id is unaliased' do
|
|
24
|
+
it 'persists separate id and _id values' do
|
|
25
|
+
shirt = Shirt.create!(id: 'hello', _id: 'foo')
|
|
26
|
+
shirt = Shirt.find(shirt._id)
|
|
27
|
+
shirt.id.should == 'hello'
|
|
28
|
+
shirt._id.should == 'foo'
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
23
32
|
describe '#reload' do
|
|
24
33
|
context 'when changing shard key value' do
|
|
25
34
|
require_topology :sharded
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
- name: existing field - matches with int
|
|
2
|
+
document:
|
|
3
|
+
a: 20
|
|
4
|
+
binaryValueofA: "00010100"
|
|
5
|
+
query:
|
|
6
|
+
a:
|
|
7
|
+
$bitsAllClear: 35
|
|
8
|
+
matches: true
|
|
9
|
+
min_server_version: 3.2
|
|
10
|
+
|
|
11
|
+
- name: existing field - does not match with int
|
|
12
|
+
document:
|
|
13
|
+
a: 20
|
|
14
|
+
binaryValueofA: "00010100"
|
|
15
|
+
query:
|
|
16
|
+
a:
|
|
17
|
+
$bitsAllClear: 24
|
|
18
|
+
matches: false
|
|
19
|
+
min_server_version: 3.2
|
|
20
|
+
|
|
21
|
+
- name: existing field - matches with binData
|
|
22
|
+
document:
|
|
23
|
+
a: 20
|
|
24
|
+
binaryValueofA: "00010100"
|
|
25
|
+
query:
|
|
26
|
+
a:
|
|
27
|
+
$bitsAllClear: !ruby/object:BSON::Binary
|
|
28
|
+
data: !binary |-
|
|
29
|
+
IW==
|
|
30
|
+
type: :generic
|
|
31
|
+
matches: true
|
|
32
|
+
min_server_version: 3.2
|
|
33
|
+
|
|
34
|
+
- name: existing field - does not match with binData
|
|
35
|
+
document:
|
|
36
|
+
a: 21
|
|
37
|
+
binaryValueofA: "00010101"
|
|
38
|
+
query:
|
|
39
|
+
a:
|
|
40
|
+
$bitsAllClear: !ruby/object:BSON::Binary
|
|
41
|
+
data: !binary |-
|
|
42
|
+
IW==
|
|
43
|
+
type: :generic
|
|
44
|
+
matches: false
|
|
45
|
+
min_server_version: 3.2
|
|
46
|
+
|
|
47
|
+
- name: existing binData field matches
|
|
48
|
+
document:
|
|
49
|
+
a: !ruby/object:BSON::Binary
|
|
50
|
+
data: !binary |-
|
|
51
|
+
IW==
|
|
52
|
+
type: :generic
|
|
53
|
+
query:
|
|
54
|
+
a:
|
|
55
|
+
$bitsAllClear: 20
|
|
56
|
+
matches: true
|
|
57
|
+
min_server_version: 3.2
|
|
58
|
+
|
|
59
|
+
- name: existing binData field does not match
|
|
60
|
+
document:
|
|
61
|
+
a: !ruby/object:BSON::Binary
|
|
62
|
+
data: !binary |-
|
|
63
|
+
IW==
|
|
64
|
+
type: :generic
|
|
65
|
+
query:
|
|
66
|
+
a:
|
|
67
|
+
$bitsAllClear: 15
|
|
68
|
+
matches: false
|
|
69
|
+
min_server_version: 3.2
|
|
70
|
+
|
|
71
|
+
- name: existing field - matches with array
|
|
72
|
+
document:
|
|
73
|
+
a: 20
|
|
74
|
+
binaryValueofA: "00010100"
|
|
75
|
+
query:
|
|
76
|
+
a:
|
|
77
|
+
$bitsAllClear: [0, 3]
|
|
78
|
+
matches: true
|
|
79
|
+
min_server_version: 3.2
|
|
80
|
+
|
|
81
|
+
- name: existing field - does not match with array
|
|
82
|
+
document:
|
|
83
|
+
a: 20
|
|
84
|
+
binaryValueofA: "00010100"
|
|
85
|
+
query:
|
|
86
|
+
a:
|
|
87
|
+
$bitsAllClear: [0, 2]
|
|
88
|
+
matches: false
|
|
89
|
+
min_server_version: 3.2
|
|
90
|
+
|
|
91
|
+
- name: float condition representable as an integer
|
|
92
|
+
document:
|
|
93
|
+
a: 20
|
|
94
|
+
binaryValueofA: "00010100"
|
|
95
|
+
query:
|
|
96
|
+
a:
|
|
97
|
+
$bitsAllClear: 35.0
|
|
98
|
+
matches: true
|
|
99
|
+
min_server_version: 3.2
|
|
100
|
+
|
|
101
|
+
- name: float condition not representable as an integer
|
|
102
|
+
document:
|
|
103
|
+
a: 20
|
|
104
|
+
binaryValueofA: "00010100"
|
|
105
|
+
query:
|
|
106
|
+
a:
|
|
107
|
+
$bitsAllClear: 35.1
|
|
108
|
+
error: true
|
|
109
|
+
min_server_version: 3.2
|
|
110
|
+
|
|
111
|
+
- name: string condition
|
|
112
|
+
document:
|
|
113
|
+
a: 54
|
|
114
|
+
binaryValueofA: "00110110"
|
|
115
|
+
query:
|
|
116
|
+
a:
|
|
117
|
+
$bitsAllClear: hello
|
|
118
|
+
error: true
|
|
119
|
+
min_server_version: 3.2
|
|
120
|
+
|
|
121
|
+
- name: empty array condition
|
|
122
|
+
document:
|
|
123
|
+
a: 20
|
|
124
|
+
binaryValueofA: "00010100"
|
|
125
|
+
query:
|
|
126
|
+
a:
|
|
127
|
+
$bitsAllClear: []
|
|
128
|
+
matches: true
|
|
129
|
+
min_server_version: 3.2
|
|
130
|
+
|
|
131
|
+
- name: integer 0 condition
|
|
132
|
+
document:
|
|
133
|
+
a: 20
|
|
134
|
+
binaryValueofA: "00010100"
|
|
135
|
+
query:
|
|
136
|
+
a:
|
|
137
|
+
$bitsAllClear: 0
|
|
138
|
+
matches: true
|
|
139
|
+
min_server_version: 3.2
|
|
140
|
+
|
|
141
|
+
- name: negative integer condition
|
|
142
|
+
document:
|
|
143
|
+
a: 54
|
|
144
|
+
binaryValueofA: "00110110"
|
|
145
|
+
query:
|
|
146
|
+
a:
|
|
147
|
+
$bitsAllClear: -1
|
|
148
|
+
error: true
|
|
149
|
+
min_server_version: 3.2
|
|
150
|
+
|
|
151
|
+
- name: negative float condition
|
|
152
|
+
document:
|
|
153
|
+
a: 54
|
|
154
|
+
binaryValueofA: "00110110"
|
|
155
|
+
query:
|
|
156
|
+
a:
|
|
157
|
+
$bitsAllClear: -1.0
|
|
158
|
+
error: true
|
|
159
|
+
min_server_version: 3.2
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
- name: existing field - matches with int
|
|
2
|
+
document:
|
|
3
|
+
a: 54
|
|
4
|
+
binaryValueofA: "00110110"
|
|
5
|
+
query:
|
|
6
|
+
a:
|
|
7
|
+
$bitsAllSet: 50
|
|
8
|
+
matches: true
|
|
9
|
+
min_server_version: 3.2
|
|
10
|
+
|
|
11
|
+
- name: existing field - does not match with int
|
|
12
|
+
document:
|
|
13
|
+
a: 52
|
|
14
|
+
binaryValueofA: "00110100"
|
|
15
|
+
query:
|
|
16
|
+
a:
|
|
17
|
+
$bitsAllSet: 50
|
|
18
|
+
matches: false
|
|
19
|
+
min_server_version: 3.2
|
|
20
|
+
|
|
21
|
+
- name: existing field - matches with binData
|
|
22
|
+
document:
|
|
23
|
+
a: 54
|
|
24
|
+
binaryValueofA: "00110110"
|
|
25
|
+
query:
|
|
26
|
+
a:
|
|
27
|
+
$bitsAllSet: !ruby/object:BSON::Binary
|
|
28
|
+
data: !binary |-
|
|
29
|
+
Ng==
|
|
30
|
+
type: :generic
|
|
31
|
+
matches: true
|
|
32
|
+
min_server_version: 3.2
|
|
33
|
+
|
|
34
|
+
- name: existing field - does not match with binData
|
|
35
|
+
document:
|
|
36
|
+
a: 21
|
|
37
|
+
binaryValueofA: "00010101"
|
|
38
|
+
query:
|
|
39
|
+
a:
|
|
40
|
+
$bitsAllSet: !ruby/object:BSON::Binary
|
|
41
|
+
data: !binary |-
|
|
42
|
+
MC==
|
|
43
|
+
type: :generic
|
|
44
|
+
matches: false
|
|
45
|
+
min_server_version: 3.2
|
|
46
|
+
|
|
47
|
+
- name: existing binData field matches
|
|
48
|
+
document:
|
|
49
|
+
a: !ruby/object:BSON::Binary
|
|
50
|
+
data: !binary |-
|
|
51
|
+
Ng==
|
|
52
|
+
type: :generic
|
|
53
|
+
query:
|
|
54
|
+
a:
|
|
55
|
+
$bitsAllSet: 48
|
|
56
|
+
matches: true
|
|
57
|
+
min_server_version: 3.2
|
|
58
|
+
|
|
59
|
+
- name: existing binData field does not match
|
|
60
|
+
document:
|
|
61
|
+
a: !ruby/object:BSON::Binary
|
|
62
|
+
data: !binary |-
|
|
63
|
+
MC==
|
|
64
|
+
type: :generic
|
|
65
|
+
query:
|
|
66
|
+
a:
|
|
67
|
+
$bitsAllSet: 54
|
|
68
|
+
matches: false
|
|
69
|
+
min_server_version: 3.2
|
|
70
|
+
|
|
71
|
+
- name: existing field - matches with array
|
|
72
|
+
document:
|
|
73
|
+
a: 20
|
|
74
|
+
binaryValueofA: "00010100"
|
|
75
|
+
query:
|
|
76
|
+
a:
|
|
77
|
+
$bitsAllSet: [2, 4]
|
|
78
|
+
matches: true
|
|
79
|
+
min_server_version: 3.2
|
|
80
|
+
|
|
81
|
+
- name: existing field - does not match with array
|
|
82
|
+
document:
|
|
83
|
+
a: 20
|
|
84
|
+
binaryValueofA: "00010100"
|
|
85
|
+
query:
|
|
86
|
+
a:
|
|
87
|
+
$bitsAllSet: [0, 3]
|
|
88
|
+
matches: false
|
|
89
|
+
min_server_version: 3.2
|
|
90
|
+
|
|
91
|
+
- name: float condition representable as an integer
|
|
92
|
+
document:
|
|
93
|
+
a: 54
|
|
94
|
+
binaryValueofA: "00110110"
|
|
95
|
+
query:
|
|
96
|
+
a:
|
|
97
|
+
$bitsAllSet: 50.0
|
|
98
|
+
matches: true
|
|
99
|
+
min_server_version: 3.2
|
|
100
|
+
|
|
101
|
+
- name: float condition not representable as an integer
|
|
102
|
+
document:
|
|
103
|
+
a: 54
|
|
104
|
+
binaryValueofA: "00110110"
|
|
105
|
+
query:
|
|
106
|
+
a:
|
|
107
|
+
$bitsAllSet: 50.1
|
|
108
|
+
error: true
|
|
109
|
+
min_server_version: 3.2
|
|
110
|
+
|
|
111
|
+
- name: string condition
|
|
112
|
+
document:
|
|
113
|
+
a: 54
|
|
114
|
+
binaryValueofA: "00110110"
|
|
115
|
+
query:
|
|
116
|
+
a:
|
|
117
|
+
$bitsAllSet: hello
|
|
118
|
+
error: true
|
|
119
|
+
min_server_version: 3.2
|
|
120
|
+
|
|
121
|
+
- name: empty array condition
|
|
122
|
+
document:
|
|
123
|
+
a: 54
|
|
124
|
+
binaryValueofA: "00110110"
|
|
125
|
+
query:
|
|
126
|
+
a:
|
|
127
|
+
$bitsAllSet: []
|
|
128
|
+
matches: true
|
|
129
|
+
min_server_version: 3.2
|
|
130
|
+
|
|
131
|
+
- name: integer 0 condition
|
|
132
|
+
document:
|
|
133
|
+
a: 54
|
|
134
|
+
binaryValueofA: "00110110"
|
|
135
|
+
query:
|
|
136
|
+
a:
|
|
137
|
+
$bitsAllSet: 0
|
|
138
|
+
matches: true
|
|
139
|
+
min_server_version: 3.2
|
|
140
|
+
|
|
141
|
+
- name: negative integer condition
|
|
142
|
+
document:
|
|
143
|
+
a: 54
|
|
144
|
+
binaryValueofA: "00110110"
|
|
145
|
+
query:
|
|
146
|
+
a:
|
|
147
|
+
$bitsAllSet: -1
|
|
148
|
+
error: true
|
|
149
|
+
min_server_version: 3.2
|
|
150
|
+
|
|
151
|
+
- name: negative float condition
|
|
152
|
+
document:
|
|
153
|
+
a: 54
|
|
154
|
+
binaryValueofA: "00110110"
|
|
155
|
+
query:
|
|
156
|
+
a:
|
|
157
|
+
$bitsAllSet: -1.0
|
|
158
|
+
error: true
|
|
159
|
+
min_server_version: 3.2
|