首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于上一次has_many关系的DateTime来提取Mongoid文档?

基于上一次has_many关系的DateTime来提取Mongoid文档?
EN

Stack Overflow用户
提问于 2013-05-12 18:52:59
回答 2查看 332关注 0票数 0

我有一堆orders,其中一些有order_confirmations

1:我希望根据最后一个ordersDateTime提取一个order_confirmation列表。这是我失败的尝试(返回0条记录):

代码语言:javascript
复制
Order.where(:order_confirmations.exists => true).desc("order_confirmations.last.datetime")

2:我希望提取最后一个order_confirmation在5到10天内的orders的列表。这是我失败的尝试(返回0个结果):

代码语言:javascript
复制
Order.lte("order_confirmations.last.datetime" => 5.days.ago).gte("order_confirmations.last.datetime" => 10.days.ago)

我的亲戚:

代码语言:javascript
复制
class Order
  include Mongoid::Document
  has_many :order_confirmations
end

class OrderConfirmation
  include Mongoid::Document
  field :datetime, type: DateTime
  belongs_to :order
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-12 21:23:52

存在引用关系时,不能直接查询被引用的单据。

也就是说,您可能希望首先查询订单确认,然后选择订单,如下所示:

代码语言:javascript
复制
OrderConfirmation.between(datetime: 10.days.ago..5.days.ago)
  .distinct(:order_id).map { |id| Order.find(id) }

如果您在订单中嵌入了确认,如下所示

代码语言:javascript
复制
class Order
  include Mongoid::Document
  embeds_many :order_confirmations
end

class OrderConfirmation
  include Mongoid::Document
  field :datetime, type: DateTime
  embedded_in :order
end

然后,您可以使用$elemMatch在订单查询中查询订单确认

代码语言:javascript
复制
Order.elem_match(order_confirmations:
  { :datetime.gte => 10.days.ago, :datetime.lte => 5.days.ago })

关于您的第一个问题,我认为仅使用MongoDB查询是不可能做到这一点的,所以您可以这样做

代码语言:javascript
复制
# if you go embedded rels
Order.all.map { |o| o.order_confirmations.desc(:datetime).first }
  .sort_by(&:datetime).map(&:order)

# if you stay on referenced rels
OrderConfirmation.desc(:datetime).group_by(&:order)
  .map { |k, v| v.first }.map(&:order)
票数 1
EN

Stack Overflow用户

发布于 2013-05-12 20:13:35

查看elemMatch函数。

代码语言:javascript
复制
where('$elemMatch' => [{...}]

我确实认为mongoid中有一个bug,虽然与elemMatch和日期比较有关,但不确定它是否被修复了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16506596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档