Skip to content

Commit 9d977cb

Browse files
nilskuhnarichiardi
authored andcommitted
🐛 Removed partial update support for arrays
probably doesn't make sense in most use cases and causes trouble if size or order of array elements changes
1 parent f1dfb81 commit 9d977cb

File tree

2 files changed

+28
-29
lines changed

2 files changed

+28
-29
lines changed

lib/logstash/outputs/mongodb.rb

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -175,16 +175,7 @@ def get_write_ops(documents)
175175
def to_dotted_hash(hash, recursive_key = "")
176176
hash.each_with_object({}) do |(k, v), ret|
177177
key = recursive_key + k.to_s
178-
if v.is_a? Array
179-
v.each_with_index do |arrV, i|
180-
arrKey = key + "." + i.to_s
181-
if arrV.is_a? Hash
182-
ret.merge! to_dotted_hash(arrV, arrKey + ".")
183-
else
184-
ret[arrKey] = arrV
185-
end
186-
end
187-
elsif v.is_a? Hash
178+
if v.is_a? Hash
188179
ret.merge! to_dotted_hash(v, key + ".")
189180
else
190181
ret[key] = v

spec/outputs/mongodb_update_nested_fields_spec.rb

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,22 @@
2323

2424
let(:properties) { {
2525
"message" => "This is a message!",
26-
"hashField" => {
27-
"numField" => 1,
28-
"hashField" => {
26+
"rootHashField" => {
27+
"numFieldInHash" => 1,
28+
"hashFieldInHash" => {
2929
"numField": 2
3030
},
31-
"arrayField" => ["one", "two", "three"]
31+
"arrayFieldInHash" => ["one", "two", "three"]
3232
},
33-
"arrayField": [
34-
{"strField" => "four"},
35-
{"strField" => "five"},
36-
{"strField" => "six"},
37-
"numField" => 3
33+
"rootArrayField": [
34+
{"strFieldInArray" => "four"},
35+
{"strFieldInArray" => "five"},
36+
{"strFieldInArray" => "six"}
37+
],
38+
"nestedArrayField": [
39+
{"strFieldInArray" => "four", "arrayFieldInArray" => [3, 4], "hashFieldInArray" => {"numField" => 9}},
40+
{"strFieldInArray" => "five", "arrayFieldInArray" => [5, 6], "hashFieldInArray" => {"numField" => 10}},
41+
{"strFieldInArray" => "six", "arrayFieldInArray" => [7, 8], "hashFieldInArray" => {"numField" => 11}}
3842
]
3943
} }
4044
let(:event) { LogStash::Event.new(properties) }
@@ -56,21 +60,25 @@
5660

5761
describe "when processing an event with nested hash" do
5862

59-
it "should send a document update to mongodb with dotted notation" do
63+
it "should send a document update to mongodb with dotted notation for fields in inner hashes" do
6064
expect(event).to receive(:timestamp).and_return(nil)
6165
expect(event).to receive(:to_hash).and_return(properties)
6266
expect(collection).to receive(:bulk_write).with(
6367
[{:update_one => {:filter => {"_id" => query_value}, :update => {"$set" => {
6468
"message" => "This is a message!",
65-
"hashField.numField" => 1,
66-
"hashField.hashField.numField" => 2,
67-
"hashField.arrayField.0" => "one",
68-
"hashField.arrayField.1" => "two",
69-
"hashField.arrayField.2" => "three",
70-
"arrayField.0.strField" => "four",
71-
"arrayField.1.strField" => "five",
72-
"arrayField.2.strField" => "six",
73-
"arrayField.3.numField" => 3,
69+
"rootHashField.numFieldInHash" => 1,
70+
"rootHashField.hashFieldInHash.numField" => 2,
71+
"rootHashField.arrayFieldInHash" => ["one", "two", "three"],
72+
"rootArrayField" => [
73+
{"strFieldInArray" => "four"},
74+
{"strFieldInArray" => "five"},
75+
{"strFieldInArray" => "six"}
76+
],
77+
"nestedArrayField" => [
78+
{"strFieldInArray" => "four", "arrayFieldInArray" => [3, 4], "hashFieldInArray" => {"numField" => 9}},
79+
{"strFieldInArray" => "five", "arrayFieldInArray" => [5, 6], "hashFieldInArray" => {"numField" => 10}},
80+
{"strFieldInArray" => "six", "arrayFieldInArray" => [7, 8], "hashFieldInArray" => {"numField" => 11}}
81+
],
7482
}}, :upsert => false}}]
7583
)
7684
subject.receive(event)

0 commit comments

Comments
 (0)