Skip to content

Commit

Permalink
Fix MONGOID-5035 Query embedded documents by date field with $gt/gte/…
Browse files Browse the repository at this point in the history
…lt/lte does not find existing documents (#4942)

Co-authored-by: Oleg Pudeyev <[email protected]>
  • Loading branch information
p-mongo and p authored Jan 8, 2021
1 parent 757e521 commit 35c48e5
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 11 deletions.
18 changes: 7 additions & 11 deletions lib/mongoid/matcher/field_operator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,13 @@ module FieldOperator
end

module_function def apply_comparison_operator(operator, left, right)
case left
when Numeric
case right
when Numeric
left.send(operator, right)
else
false
end
else
false
end
left.send(operator, right)
rescue ArgumentError, NoMethodError, TypeError
# We silence bogus comparison attempts, e.g. number to string
# comparisons.
# Several different exceptions may be produced depending on the types
# involved.
false
end
end
end
Expand Down
63 changes: 63 additions & 0 deletions spec/integration/matcher_operator_data/gt_types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
- name: Date field - matches
document:
date_field: 2020-12-22
query:
date_field:
$gt: 2020-12-21
matches: true

- name: Date field - does not match
document:
date_field: 2020-12-21
query:
date_field:
$gt: 2020-12-21
matches: false

- name: Date value in generic field - matches
document:
field: 2020-12-22
query:
field:
$gt: 2020-12-21
matches: true

- name: Date field - does not match
document:
field: 2020-12-21
query:
field:
$gt: 2020-12-21
matches: false

- name: Time value in generic field queried by date - matches
document:
field: 2020-12-22 00:00:00
query:
field:
$gt: 2020-12-21
matches: true

- name: Time value in generic field queried by date - does not match
document:
field: 2020-12-21 00:00:00
query:
field:
$gt: 2020-12-21
matches: false

- name: Time value in generic field - matches
document:
field: 2020-12-22 00:00:00
query:
field:
$gt: 2020-12-21 00:00:00
matches: true

- name: Time value in generic field - does not match
document:
field: 2020-12-21 00:00:00
query:
field:
$gt: 2020-12-21 00:00:00
matches: false
15 changes: 15 additions & 0 deletions spec/integration/matcher_operator_data/gte_types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
- name: Date field - matches
document:
date_field: 2020-12-22
query:
date_field:
$gte: 2020-12-21
matches: true

- name: Date field - does not match
document:
date_field: 2020-12-20
query:
date_field:
$gte: 2020-12-21
matches: false
15 changes: 15 additions & 0 deletions spec/integration/matcher_operator_data/lt_types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
- name: Date field - matches
document:
date_field: 2020-12-19
query:
date_field:
$lt: 2020-12-21
matches: true

- name: Date field - does not match
document:
date_field: 2020-12-21
query:
date_field:
$lt: 2020-12-21
matches: false
15 changes: 15 additions & 0 deletions spec/integration/matcher_operator_data/lte_types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
- name: Date field - matches
document:
date_field: 2020-12-19
query:
date_field:
$lte: 2020-12-21
matches: true

- name: Date field - does not match
document:
date_field: 2020-12-22
query:
date_field:
$lte: 2020-12-21
matches: false
15 changes: 15 additions & 0 deletions spec/integration/matcher_operator_data/ne_types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
- name: Date field - matches
document:
date_field: 2020-12-22
query:
date_field:
$ne: 2020-12-21
matches: true

- name: Date field - does not match
document:
date_field: 2020-12-21
query:
date_field:
$ne: 2020-12-21
matches: false

0 comments on commit 35c48e5

Please sign in to comment.