私の環境では期待通りに動作します。(モンゴイド 3.1.3)
class User
include Mongoid::Document
embeds_many :trips
end
class Trip
include Mongoid::Document
embeds_one :start
embedded_in :user
end
class Start
include Mongoid::Document
field :time, type: DateTime
embedded_in :trip
end
User.create({ trips: [
Trip.new({ start: Start.new({ time: 5.days.ago }) }),
Trip.new({ start: Start.new({ time: 2.days.from_now }) })
] })
current_user = User.where({}).first
p current_user.trips.where('start.time' => {'$gte' => Time.now}).count
p current_user.trips.where(:'start.time'.gte => Time.now).count
上記のコードは以下を出力します。
1
1
本当に$gte
正しいですか?日付を比較するときに反対の符号を使用するのはよくある間違いです。
または、古いバージョンの Mongoid を使用している可能性があります。
アップデート:
次のコードを使用して、Mongoid が生成するクエリを確認できます。
Mongoid.logger.level = Logger::DEBUG
Moped.logger.level = Logger::DEBUG
Mongoid.logger = Logger.new($stdout)
Moped.logger = Logger.new($stdout)
これはデバッグに役立ちます。