ruby-on-rails - 2013 年 Mongoid 中的嵌套查询

标签 ruby-on-rails mongodb mongoid mongoid3 subquery

所以这个问题已经有两年了:

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/

相关文章:

ruby-on-rails - Sidekiq 安装 - 未初始化的常量 ActiveRecord::Base (NameError)

ruby-on-rails - 并发和 Mongoid

ruby-on-rails - 如何使用 Prawn 设置页面大小?

javascript - 在 Rails 服务器上设置跨域调用

ruby-on-rails - Rails PDF 上传恶意内容漏洞

python - flask-mongoengine 中的聚合

ruby-on-rails - 检查 gem 版本号

node.js - 如何为子文档创建 mongoDb 模式

Python/Flask/MongoDB - 错误消息 : BadRequestKeyError: 400 - Get list

javascript - MongoDB - 不明白如何使用游标遍历集合