所以这个问题已经有两年了:
Querying embedded objects in Mongoid/rails 3 ("Lower than", Min operators and sorting)
以及它建议查询小于或大于的嵌套对象的方式:
current_user.trips.where('start.time' => {'$gte' => Time.now}).count
根本不起作用,对于我这样的大量查询,它返回 0,这是错误的。我也尝试过
current_user.trips.where(:'start.time'.gte => Time.now}).count
这也是 0。这些实际上都不会抛出错误。
现在查询嵌套元素的正确语法是什么?对此似乎有点困惑。
最佳答案
它在我的环境中按照您的预期工作。 (mongoid 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)
这对于调试很有用。
关于ruby-on-rails - 2013 年 Mongoid 中的嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16512662/