模块:Mongoid::Matcher::EqImpl Private
- 定义于:
- lib/mongoid/matcher/eq_impl.rb
Overview
该模块是私有 API 的一部分。 您应尽可能避免使用此模块,因为它将来可能会被删除或更改。
该模块由 $eq 和其他需要执行 $eq 所执行的匹配的操作符使用(例如,$ne 对 $eq 的结果求反)。 与 $eq 不同,该模块将原始操作符作为matches?的附加参数,以提供反映首次调用的操作符的正确异常消息。
类方法摘要折叠
-
。匹配?(_exists, value,condition,original_operator) ⇒ true | false,布尔值
private
返回一个值是否满足 $eq(或类似)表达式。
-
。 time_eq? (time_a, time_b) ⇒ true | false,布尔值
private
根据 https://www.mongodb.com/zh-cn/docs/ruby-driver/upcoming/data-formats/bson/#time-instances,> BSON (和MongoDB)中的时间只能具有毫秒精度。
-
。 time_rounded_to_millis (time) ⇒ true | false
private
将时间值四舍五入到最接近的毫秒。
类方法详细信息
。匹配?(_exists, value,condition,original_operator) ⇒ true | false,布尔值
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回一个值是否满足 $eq(或类似)表达式。
21 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 |
# File 'lib/mongoid/matcher/eq_impl.rb', line 21 module_function def 匹配?(_exists, 值, 条件, 原始操作符) 案例 条件 when 范围 # 由于 $ne 会调用 $eq,因此异常消息需要处理 # 两个操作符。 提高 Errors::InvalidQuery, "不支持将范围作为 ' #{ original_operator } '的参数" # if value.is_a?(Array) # value.any?{ |elt| condition.include?(elt)} # else #condition.include?(value) # end else # 与 Time 对象进行比较时,使用毫秒精度进行比较 if 值.is_a?(时间) && 条件.is_a?(时间) time_eq?(值, 条件) elsif 值.is_a?(阵列) && 条件.is_a?(时间) 值.map do |v| if v.is_a?(时间) time_rounded_to_millis(v) else v end end.包括?(time_rounded_to_millis(条件)) else 值 == 条件 || (值.is_a?(阵列) && 值.包括?(条件)) end end end |
。 time_eq? (time_a, time_b) ⇒ true | false ,布尔值
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
根据 https://www.mongodb.com/zh-cn/docs/ruby-driver/upcoming/data-formats/bson/#time-instances,
BSON (和MongoDB)中的时间只能具有毫秒精度。当Ruby Time 实例序列化为BSON或扩展JSON时,时间将精确到毫秒。
由于此下限,强烈建议应用程序使用整数数学来执行所有时间计算,因为浮点计算的不精确性可能会产生意外的结果。
因此,请执行与 bson-Ruby gem 类似的操作。
65 66 67 |
# File 'lib/mongoid/matcher/eq_impl.rb', line 65 module_function def time_eq?(time_a, time_b) time_rounded_to_millis(time_a) == time_rounded_to_millis(time_b) end |
。 time_rounded_to_millis (time) ⇒ true | false
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
将时间值四舍五入到最接近的毫秒。
74 75 76 |
# File 'lib/mongoid/matcher/eq_impl.rb', line 74 module_function def time_rounded_to_millis(时间) (时间._bson_to_i * 1000) + 时间.usec.divmod(1000).first end |