mongoid 5.2.1 → 5.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +0 -0
- data/lib/mongoid/atomic.rb +1 -1
- data/lib/mongoid/atomic/modifiers.rb +12 -8
- data/lib/mongoid/attributes.rb +1 -2
- data/lib/mongoid/attributes/dynamic.rb +3 -2
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +0 -4
- data/lib/mongoid/changeable.rb +1 -1
- data/lib/mongoid/clients/options.rb +3 -2
- data/lib/mongoid/contextual/atomic.rb +9 -6
- data/lib/mongoid/contextual/geo_near.rb +3 -2
- data/lib/mongoid/contextual/map_reduce.rb +4 -0
- data/lib/mongoid/contextual/memory.rb +1 -1
- data/lib/mongoid/contextual/mongo.rb +3 -3
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/copyable.rb +0 -4
- data/lib/mongoid/criteria.rb +1 -1
- data/lib/mongoid/criteria/findable.rb +3 -2
- data/lib/mongoid/criteria/includable.rb +2 -2
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +3 -2
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/time.rb +1 -1
- data/lib/mongoid/factory.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/findable.rb +1 -1
- data/lib/mongoid/indexable.rb +3 -2
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/interceptable.rb +2 -2
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +2 -2
- data/lib/mongoid/persistable.rb +0 -3
- data/lib/mongoid/persistable/creatable.rb +0 -2
- data/lib/mongoid/query_cache.rb +5 -1
- data/lib/mongoid/relations/accessors.rb +1 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -4
- data/lib/mongoid/relations/bindings/embedded/many.rb +1 -8
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -10
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -4
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +10 -10
- data/lib/mongoid/relations/eager/base.rb +4 -4
- data/lib/mongoid/relations/embedded/batchable.rb +33 -9
- data/lib/mongoid/relations/embedded/in.rb +1 -3
- data/lib/mongoid/relations/embedded/many.rb +4 -5
- data/lib/mongoid/relations/embedded/one.rb +1 -3
- data/lib/mongoid/relations/macros.rb +2 -1
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/proxy.rb +3 -2
- data/lib/mongoid/relations/referenced/in.rb +1 -4
- data/lib/mongoid/relations/referenced/many.rb +3 -5
- data/lib/mongoid/relations/referenced/many_to_many.rb +1 -1
- data/lib/mongoid/relations/referenced/one.rb +0 -2
- data/lib/mongoid/relations/reflections.rb +2 -2
- data/lib/mongoid/scopable.rb +2 -2
- data/lib/mongoid/serializable.rb +3 -2
- data/lib/mongoid/tasks/database.rb +2 -1
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +4 -2
- data/lib/mongoid/version.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/clients/options_spec.rb +9 -0
- data/spec/mongoid/contextual/atomic_spec.rb +3 -3
- data/spec/mongoid/persistable/savable_spec.rb +2 -2
- data/spec/mongoid/persistable/updatable_spec.rb +2 -2
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/spec_helper.rb +1 -1
- metadata +440 -418
- metadata.gz.sig +0 -0
data/lib/mongoid/findable.rb
CHANGED
@@ -71,7 +71,7 @@ module Mongoid
|
|
71
71
|
# @example Do any documents exist for the conditions?
|
72
72
|
# Person.exists?
|
73
73
|
#
|
74
|
-
# @
|
74
|
+
# @return [ true, false ] If any documents exist for the conditions.
|
75
75
|
def exists?
|
76
76
|
with_default_scope.exists?
|
77
77
|
end
|
data/lib/mongoid/indexable.rb
CHANGED
@@ -90,7 +90,7 @@ module Mongoid
|
|
90
90
|
# index({ name: 1 }, { background: true })
|
91
91
|
# end
|
92
92
|
#
|
93
|
-
# @param [ Symbol ]
|
93
|
+
# @param [ Symbol ] spec The index spec.
|
94
94
|
# @param [ Hash ] options The index options.
|
95
95
|
#
|
96
96
|
# @return [ Hash ] The index options.
|
@@ -108,7 +108,8 @@ module Mongoid
|
|
108
108
|
# @example Get the index specification.
|
109
109
|
# Model.index_specification(name: 1)
|
110
110
|
#
|
111
|
-
# @param [ Hash ]
|
111
|
+
# @param [ Hash ] index_hash The index key/direction pair.
|
112
|
+
# @param [ String ] index_name The index name.
|
112
113
|
#
|
113
114
|
# @return [ Specification ] The found specification.
|
114
115
|
#
|
@@ -99,7 +99,7 @@ module Mongoid
|
|
99
99
|
# @example Normalize the index options.
|
100
100
|
# specification.normalize_options(drop_dups: true)
|
101
101
|
#
|
102
|
-
# @param [ Hash ]
|
102
|
+
# @param [ Hash ] opts The index options.
|
103
103
|
#
|
104
104
|
# @return [ Hash ] The normalized options.
|
105
105
|
#
|
@@ -46,7 +46,7 @@ module Mongoid
|
|
46
46
|
# @example Is the callback executable?
|
47
47
|
# document.callback_executable?(:save)
|
48
48
|
#
|
49
|
-
# @param [ Symbol ]
|
49
|
+
# @param [ Symbol ] kind The type of callback.
|
50
50
|
#
|
51
51
|
# @return [ true, false ] If the callback can be executed.
|
52
52
|
#
|
@@ -118,7 +118,7 @@ module Mongoid
|
|
118
118
|
# end
|
119
119
|
#
|
120
120
|
# @param [ Symbol ] kind The type of callback to execute.
|
121
|
-
# @param [ Array ]
|
121
|
+
# @param [ Array ] args Any options.
|
122
122
|
#
|
123
123
|
# @return [ Document ] The document
|
124
124
|
#
|
data/lib/mongoid/loggable.rb
CHANGED
data/lib/mongoid/matchable.rb
CHANGED
@@ -82,7 +82,7 @@ module Mongoid
|
|
82
82
|
#
|
83
83
|
# @param [ Document ] document The document to check.
|
84
84
|
# @param [ Symbol, String ] key The field name.
|
85
|
-
# @param [ Object, Hash ] The value or selector.
|
85
|
+
# @param [ Object, Hash ] value The value or selector.
|
86
86
|
#
|
87
87
|
# @return [ Matcher ] The matcher.
|
88
88
|
#
|
@@ -103,7 +103,7 @@ module Mongoid
|
|
103
103
|
#
|
104
104
|
# @param [ Document ] document The document to check.
|
105
105
|
# @param [ Symbol, String ] key The field name.
|
106
|
-
# @param [ Object, Hash ] The value or selector.
|
106
|
+
# @param [ Object, Hash ] value The value or selector.
|
107
107
|
#
|
108
108
|
# @return [ Matcher ] The matcher.
|
109
109
|
#
|
data/lib/mongoid/persistable.rb
CHANGED
@@ -69,8 +69,6 @@ module Mongoid
|
|
69
69
|
# @example Raise the validation error.
|
70
70
|
# Person.fail_due_to_validation!(person)
|
71
71
|
#
|
72
|
-
# @param [ Document ] document The document to fail.
|
73
|
-
#
|
74
72
|
# @raise [ Errors::Validations ] The validation error.
|
75
73
|
#
|
76
74
|
# @since 4.0.0
|
@@ -83,7 +81,6 @@ module Mongoid
|
|
83
81
|
# @example Raise the callback error.
|
84
82
|
# Person.fail_due_to_callback!(person, :create!)
|
85
83
|
#
|
86
|
-
# @param [ Document ] document The document to fail.
|
87
84
|
# @param [ Symbol ] method The method being called.
|
88
85
|
#
|
89
86
|
# @raise [ Errors::Callback ] The callback error.
|
@@ -165,8 +165,6 @@ module Mongoid
|
|
165
165
|
#
|
166
166
|
# @param [ Hash, Array ] attributes The attributes to create with, or an
|
167
167
|
# Array of multiple attributes for multiple documents.
|
168
|
-
# @param [ Hash ] options A mass-assignment protection options. Supports
|
169
|
-
# :as and :without_protection
|
170
168
|
#
|
171
169
|
# @return [ Document, Array<Document> ] The newly created document(s).
|
172
170
|
#
|
data/lib/mongoid/query_cache.rb
CHANGED
@@ -221,7 +221,7 @@ module Mongoid
|
|
221
221
|
super
|
222
222
|
else
|
223
223
|
unless cursor = cached_cursor
|
224
|
-
server =
|
224
|
+
server = read_or_server_selector.select_server(cluster)
|
225
225
|
cursor = CachedCursor.new(view, send_initial_query(server), server)
|
226
226
|
QueryCache.cache_table[cache_key] = cursor
|
227
227
|
end
|
@@ -234,6 +234,10 @@ module Mongoid
|
|
234
234
|
|
235
235
|
private
|
236
236
|
|
237
|
+
def read_or_server_selector
|
238
|
+
respond_to?(:server_selector, true) ? server_selector : read
|
239
|
+
end
|
240
|
+
|
237
241
|
def cached_cursor
|
238
242
|
if limit
|
239
243
|
key = [ collection.namespace, selector, nil, skip, sort, projection, collation ]
|
@@ -17,7 +17,6 @@ module Mongoid
|
|
17
17
|
# @param [ String, Symbol ] name The name of the relation.
|
18
18
|
# @param [ Hash, BSON::ObjectId ] object The id or attributes to use.
|
19
19
|
# @param [ Metadata ] metadata The relation's metadata.
|
20
|
-
# @param [ true, false ] building If we are in a build operation.
|
21
20
|
#
|
22
21
|
# @return [ Proxy ] The relation.
|
23
22
|
#
|
@@ -32,7 +31,7 @@ module Mongoid
|
|
32
31
|
# @example Create the relation.
|
33
32
|
# person.create_relation(document, metadata)
|
34
33
|
#
|
35
|
-
# @param [ Document, Array<Document ] object The relation target.
|
34
|
+
# @param [ Document, Array<Document> ] object The relation target.
|
36
35
|
# @param [ Metadata ] metadata The relation metadata.
|
37
36
|
#
|
38
37
|
# @return [ Proxy ] The relation.
|
@@ -17,8 +17,6 @@ module Mongoid
|
|
17
17
|
# name.person.bind(:continue => true)
|
18
18
|
# name.person = Person.new
|
19
19
|
#
|
20
|
-
# @param [ Hash ] options The binding options.
|
21
|
-
#
|
22
20
|
# @option options [ true, false ] :continue Continue binding the inverse.
|
23
21
|
# @option options [ true, false ] :binding Are we in build mode?
|
24
22
|
#
|
@@ -42,8 +40,6 @@ module Mongoid
|
|
42
40
|
# name.person.unbind(:continue => true)
|
43
41
|
# name.person = nil
|
44
42
|
#
|
45
|
-
# @param [ Hash ] options The options to pass through.
|
46
|
-
#
|
47
43
|
# @option options [ true, false ] :continue Do we continue unbinding?
|
48
44
|
#
|
49
45
|
# @since 2.0.0.rc.1
|
@@ -14,10 +14,6 @@ module Mongoid
|
|
14
14
|
# person.addresses.bind_one(address)
|
15
15
|
#
|
16
16
|
# @param [ Document ] doc The single document to bind.
|
17
|
-
# @param [ Hash ] options The binding options.
|
18
|
-
#
|
19
|
-
# @option options [ true, false ] :continue Continue binding the inverse.
|
20
|
-
# @option options [ true, false ] :binding Are we in build mode?
|
21
17
|
#
|
22
18
|
# @since 2.0.0.rc.1
|
23
19
|
def bind_one(doc)
|
@@ -32,10 +28,7 @@ module Mongoid
|
|
32
28
|
# @example Unbind the document.
|
33
29
|
# person.addresses.unbind_one(document)
|
34
30
|
#
|
35
|
-
# @param [
|
36
|
-
#
|
37
|
-
# @option options [ true, false ] :continue Continue binding the inverse.
|
38
|
-
# @option options [ true, false ] :binding Are we in build mode?
|
31
|
+
# @param [ Document ] doc The single document to unbind.
|
39
32
|
#
|
40
33
|
# @since 2.0.0.rc.1
|
41
34
|
def unbind_one(doc)
|
@@ -17,11 +17,6 @@ module Mongoid
|
|
17
17
|
# person.name.bind(:continue => true)
|
18
18
|
# person.name = Name.new
|
19
19
|
#
|
20
|
-
# @param [ Hash ] options The options to pass through.
|
21
|
-
#
|
22
|
-
# @option options [ true, false ] :continue Do we continue binding?
|
23
|
-
# @option options [ true, false ] :binding Are we in build mode?
|
24
|
-
#
|
25
20
|
# @since 2.0.0.rc.1
|
26
21
|
def bind_one
|
27
22
|
target.parentize(base)
|
@@ -37,11 +32,6 @@ module Mongoid
|
|
37
32
|
# person.name.unbind(:continue => true)
|
38
33
|
# person.name = nil
|
39
34
|
#
|
40
|
-
# @param [ Hash ] options The options to pass through.
|
41
|
-
#
|
42
|
-
# @option options [ true, false ] :continue Do we continue unbinding?
|
43
|
-
# @option options [ true, false ] :binding Are we in build mode?
|
44
|
-
#
|
45
35
|
# @since 2.0.0.rc.1
|
46
36
|
def unbind_one
|
47
37
|
binding do
|
@@ -13,8 +13,6 @@ module Mongoid
|
|
13
13
|
# @example Bind one document.
|
14
14
|
# person.posts.bind_one(post)
|
15
15
|
#
|
16
|
-
# @param [ Document ] doc The single document to bind.
|
17
|
-
#
|
18
16
|
# @since 2.0.0.rc.1
|
19
17
|
def bind_one(doc)
|
20
18
|
binding do
|
@@ -27,8 +25,6 @@ module Mongoid
|
|
27
25
|
# @example Unbind the document.
|
28
26
|
# person.posts.unbind_one(document)
|
29
27
|
#
|
30
|
-
# @param [ Document ] document The document to unbind.
|
31
|
-
#
|
32
28
|
# @since 2.0.0.rc.1
|
33
29
|
def unbind_one(doc)
|
34
30
|
binding do
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Build the document.
|
13
13
|
# Builder.new(meta, attrs).build
|
14
14
|
#
|
15
|
-
# @param [ String ]
|
15
|
+
# @param [ String ] _type Not used in this context.
|
16
16
|
#
|
17
17
|
# @return [ Document ] A single document.
|
18
18
|
def build(_type = nil)
|
@@ -60,7 +60,7 @@ module Mongoid
|
|
60
60
|
# @example Is the document destroyable?
|
61
61
|
# destroyable?({ :_destroy => "1" })
|
62
62
|
#
|
63
|
-
# @
|
63
|
+
# @param [ Hash ] attributes The attributes to pull the flag from.
|
64
64
|
#
|
65
65
|
# @return [ true, false ] If the relation can potentially be deleted.
|
66
66
|
def destroyable?(attributes)
|
@@ -13,7 +13,7 @@ module Mongoid
|
|
13
13
|
# Conversions.flag(metadata, 15)
|
14
14
|
#
|
15
15
|
# @param [ Object ] object The object to flag.
|
16
|
-
# @param [ Metadata ] The relation metadata.
|
16
|
+
# @param [ Metadata ] metadata The relation metadata.
|
17
17
|
#
|
18
18
|
# @return [ Object ] The provided object.
|
19
19
|
#
|
@@ -11,7 +11,7 @@ module Mongoid
|
|
11
11
|
# @example Reset the given counter cache
|
12
12
|
# post.reset_counters(:comments)
|
13
13
|
#
|
14
|
-
# @param [ Symbol, Array ] One or more counter caches to reset
|
14
|
+
# @param [ Symbol, Array ] counters One or more counter caches to reset
|
15
15
|
#
|
16
16
|
# @since 4.0.0
|
17
17
|
def reset_counters(*counters)
|
@@ -27,8 +27,8 @@ module Mongoid
|
|
27
27
|
# @example Reset the given counter cache
|
28
28
|
# Post.reset_counters('50e0edd97c71c17ea9000001', :comments)
|
29
29
|
#
|
30
|
-
# @param [ String ] The id of the object that will be reset.
|
31
|
-
# @param [ Symbol, Array ] One or more counter caches to reset
|
30
|
+
# @param [ String ] id The id of the object that will be reset.
|
31
|
+
# @param [ Symbol, Array ] counters One or more counter caches to reset
|
32
32
|
#
|
33
33
|
# @since 3.1.0
|
34
34
|
def reset_counters(id, *counters)
|
@@ -49,8 +49,8 @@ module Mongoid
|
|
49
49
|
# Post.update_counters('50e0edd97c71c17ea9000001',
|
50
50
|
# :comments_count => 5, :likes_count => -2)
|
51
51
|
#
|
52
|
-
# @param [ String ] The id of the object to update.
|
53
|
-
# @param [ Hash ]
|
52
|
+
# @param [ String ] id The id of the object to update.
|
53
|
+
# @param [ Hash ] counters
|
54
54
|
#
|
55
55
|
# @since 3.1.0
|
56
56
|
def update_counters(id, counters)
|
@@ -64,8 +64,8 @@ module Mongoid
|
|
64
64
|
# @example Increment comments counter
|
65
65
|
# Post.increment_counter(:comments_count, '50e0edd97c71c17ea9000001')
|
66
66
|
#
|
67
|
-
# @param [ Symbol ] Counter cache name
|
68
|
-
# @param [ String ] The id of the object that will have its counter incremented.
|
67
|
+
# @param [ Symbol ] counter_name Counter cache name
|
68
|
+
# @param [ String ] id The id of the object that will have its counter incremented.
|
69
69
|
#
|
70
70
|
# @since 3.1.0
|
71
71
|
def increment_counter(counter_name, id)
|
@@ -79,8 +79,8 @@ module Mongoid
|
|
79
79
|
# @example Decrement comments counter
|
80
80
|
# Post.decrement_counter(:comments_count, '50e0edd97c71c17ea9000001')
|
81
81
|
#
|
82
|
-
# @param [ Symbol ] Counter cache name
|
83
|
-
# @param [ String ] The id of the object that will have its counter decremented.
|
82
|
+
# @param [ Symbol ] counter_name Counter cache name
|
83
|
+
# @param [ String ] id The id of the object that will have its counter decremented.
|
84
84
|
#
|
85
85
|
# @since 3.1.0
|
86
86
|
def decrement_counter(counter_name, id)
|
@@ -96,7 +96,7 @@ module Mongoid
|
|
96
96
|
# @example Add the touchable.
|
97
97
|
# Person.add_counter_cache_callbacks(meta)
|
98
98
|
#
|
99
|
-
# @param [ Metadata ]
|
99
|
+
# @param [ Metadata ] meta The metadata for the relation.
|
100
100
|
#
|
101
101
|
# @since 3.1.0
|
102
102
|
def add_counter_cache_callbacks(meta)
|
@@ -12,8 +12,8 @@ module Mongoid
|
|
12
12
|
# @example Create the new belongs to eager load preloader.
|
13
13
|
# BelongsTo.new(relations_metadata, parent_docs)
|
14
14
|
#
|
15
|
-
# @param [ Array<Metadata> ] Relations to eager load
|
16
|
-
# @param [ Array<Document> ] Documents to preload the relations
|
15
|
+
# @param [ Array<Metadata> ] associations Relations to eager load
|
16
|
+
# @param [ Array<Document> ] docs Documents to preload the relations
|
17
17
|
#
|
18
18
|
# @return [ Base ] The eager load preloader
|
19
19
|
#
|
@@ -84,7 +84,7 @@ module Mongoid
|
|
84
84
|
# @example Set docs into parent with pk = "foo"
|
85
85
|
# loader.set_on_parent("foo", docs)
|
86
86
|
#
|
87
|
-
# @param [ ObjectId ] parent`s id
|
87
|
+
# @param [ ObjectId ] id parent`s id
|
88
88
|
# @param [ Document, Array ] element to push into the parent
|
89
89
|
#
|
90
90
|
# @since 4.0.0
|
@@ -140,7 +140,7 @@ module Mongoid
|
|
140
140
|
# @example Set docs into parent using the current relation name.
|
141
141
|
# loader.set_relation(doc, docs)
|
142
142
|
#
|
143
|
-
# @param [ Document ]
|
143
|
+
# @param [ Document ] doc
|
144
144
|
# @param [ Document, Array ] element to set into the parent
|
145
145
|
#
|
146
146
|
# @since 4.0.0
|
@@ -13,15 +13,15 @@ module Mongoid
|
|
13
13
|
# made to the database.
|
14
14
|
#
|
15
15
|
# @example Execute the batch push.
|
16
|
-
# batchable.
|
16
|
+
# batchable.batch_push([ doc_one, doc_two ])
|
17
17
|
#
|
18
18
|
# @param [ Array<Document> ] docs The docs to add.
|
19
19
|
#
|
20
20
|
# @return [ Array<Hash> ] The inserts.
|
21
21
|
#
|
22
|
-
# @since
|
23
|
-
def
|
24
|
-
|
22
|
+
# @since 5.4.0
|
23
|
+
def batch_push(docs)
|
24
|
+
execute_batch_push(docs)
|
25
25
|
end
|
26
26
|
|
27
27
|
# Clear all of the docs out of the relation in a single swipe.
|
@@ -89,7 +89,7 @@ module Mongoid
|
|
89
89
|
base.delayed_atomic_sets.clear unless _assigning?
|
90
90
|
docs = normalize_docs(docs).compact
|
91
91
|
target.clear and _unscoped.clear
|
92
|
-
inserts =
|
92
|
+
inserts = execute_batch_set(docs)
|
93
93
|
add_atomic_sets(inserts)
|
94
94
|
end
|
95
95
|
end
|
@@ -122,26 +122,50 @@ module Mongoid
|
|
122
122
|
# @api private
|
123
123
|
#
|
124
124
|
# @example Perform a batch operation.
|
125
|
-
# batchable.
|
125
|
+
# batchable.execute_batch_set(docs)
|
126
126
|
#
|
127
127
|
# @param [ Array<Document> ] docs The docs to persist.
|
128
128
|
# @param [ String ] operation The atomic operation.
|
129
129
|
#
|
130
130
|
# @return [ Array<Hash> ] The inserts.
|
131
131
|
#
|
132
|
-
# @since
|
133
|
-
def
|
132
|
+
# @since 5.4.0
|
133
|
+
def execute_batch_set(docs)
|
134
134
|
self.inserts_valid = true
|
135
135
|
inserts = pre_process_batch_insert(docs)
|
136
136
|
if insertable?
|
137
137
|
collection.find(selector).update_one(
|
138
|
-
positionally(selector,
|
138
|
+
positionally(selector, '$set' => { path => inserts })
|
139
139
|
)
|
140
140
|
post_process_batch_insert(docs)
|
141
141
|
end
|
142
142
|
inserts
|
143
143
|
end
|
144
144
|
|
145
|
+
# Perform a batch persist of the provided documents with $push and $each.
|
146
|
+
#
|
147
|
+
# @api private
|
148
|
+
#
|
149
|
+
# @example Perform a batch push.
|
150
|
+
# batchable.execute_batch_push(docs)
|
151
|
+
#
|
152
|
+
# @param [ Array<Document> ] docs The docs to persist.
|
153
|
+
# @param [ String ] operation The atomic operation.
|
154
|
+
#
|
155
|
+
# @return [ Array<Hash> ] The inserts.
|
156
|
+
#
|
157
|
+
# @since 5.4.0
|
158
|
+
def execute_batch_push(docs)
|
159
|
+
self.inserts_valid = true
|
160
|
+
pushes = pre_process_batch_insert(docs)
|
161
|
+
if insertable?
|
162
|
+
collection.find(selector).update_one(
|
163
|
+
positionally(selector, '$push' => { path => { '$each' => pushes } }))
|
164
|
+
post_process_batch_insert(docs)
|
165
|
+
end
|
166
|
+
pushes
|
167
|
+
end
|
168
|
+
|
145
169
|
# Are we in a state to be able to batch insert?
|
146
170
|
#
|
147
171
|
# @api private
|
@@ -31,7 +31,7 @@ module Mongoid
|
|
31
31
|
# @example Substitute the new document.
|
32
32
|
# person.name.substitute(new_name)
|
33
33
|
#
|
34
|
-
# @param [ Document ]
|
34
|
+
# @param [ Document ] replacement A document to replace the target.
|
35
35
|
#
|
36
36
|
# @return [ Document, nil ] The relation or nil.
|
37
37
|
#
|
@@ -55,8 +55,6 @@ module Mongoid
|
|
55
55
|
# @example Get the binding.
|
56
56
|
# binding([ address ])
|
57
57
|
#
|
58
|
-
# @param [ Proxy ] new_target The new documents to bind with.
|
59
|
-
#
|
60
58
|
# @return [ Binding ] A binding object.
|
61
59
|
#
|
62
60
|
# @since 2.0.0.rc.1
|