我在mongoid上使用rails 3.

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与group函数一起使用,但我不确定如何在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)

希望这有帮助.

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

Mongo DB-如果一个特定字段有多个文档匹配,则更新文档字段

MongoDB DB参考返回null值

Mongoose 更新不同类型的记录

PHP 无法加载动态库 (mongo.so)

如何使用 Spring Data MongoDB 通过 GridFS ObjectId 获取二进制流

MongoDB 中 cursor.count() 和 cursor.size() 之间的区别

是否有适用于 Linux 的 MongoDB GUI 桌面应用程序?

MongoDb:如何将附加对象插入对象集合?

直接从 URL 查询字符串提供的 mongo 查询有多危险?

MongoDB 嵌套 OR/AND 在哪里?

Ruby 按键值分组哈希

文本的 MongoID 数据类型

Mongodb 类型引用 node

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

查询不等于 null 或空的地方

Mongoose:Model.create 和 Collection.insert 有什么区别

MongoDB 的 MMAPV1、WiredTiger 或 In-Memory StorageEngine 如何 Select ?

PyMongo 创建具有 2 个或更多字段的唯一索引

MongoDB Compass:select distinct field values