加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Mongoid / rails 3中查询嵌入的对象(“低于

发布时间:2020-12-16 20:30:06 所属栏目:百科 来源:网络整理
导读:我正在使用轨道3与mongoid. 我有一个收藏的股票与嵌入收藏价格: class Stock include Mongoid::Document field :name,:type = String field :code,:type = Integer embeds_many :pricesclass Price include Mongoid::Document field :date,:type = DateTime
我正在使用轨道3与mongoid.
我有一个收藏的股票与嵌入收藏价格:
class Stock
  include Mongoid::Document
  field :name,:type => String
  field :code,:type => Integer
  embeds_many :prices

class Price
  include Mongoid::Document
  field :date,:type => DateTime
  field :value,:type => Float
  embedded_in :stock,:inverse_of => :prices

我想获得自给定日期以来的最低价格低于给定价格p的股票,然后能够对每个股票的价格进行排序.

但是看起来Mongodb不允许这样做.
因为这样不行:

@stocks = Stock.Where(:prices.value.lt => p)

此外,似乎mongoDB无法对嵌入的对象进行排序.

那么,为了完成这个任务,还有其他的选择吗?

也许我应该将所有内容放在一个集合中,以便我可以轻松地运行以下查询:

@stocks = Stock.Where(:prices.lt => p)

但是,我真的希望在查询之后得到按股票名称分组的结果(例如,具有订单价格数组的不同股票).我已经听说过map / reduce与组功能,但我不知道如何正确使用Mongoid.

http://www.mongodb.org/display/DOCS/Aggregation

SQL中的等价物将是这样的:

SELECT name,code,min(price) from Stock WHERE price<p GROUP BY name,code

谢谢你的帮助.

解决方法

MongoDB / Mongoid可以让你这样做.你的例子会奏效,语法不正确.
@stocks = Stock.Where(:prices.value.lt => p) #does not work

@stocks = Stock.where('prices.value' => {'$lt' => p}) #this should work

而且,它仍然是可链接的,所以你可以按名称排序:

@stocks = Stock.where('prices.value' => {'$lt' => p}).asc(:name)

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读