我在Mongoid(2.0.0.beta.17和2.0.2)/ MongoDB中订购时遇到问题。也许我对MongoDB没有足够的经验,你们中的一些人可以帮助我理解我做错了什么?
用户级症状是:
irb(main):024:0> Update.all.size
=> 551
Update.ordered.size # (see below for definition)
=> 490
irb(main):010:0> Update.all.select{|u| u.created_at.nil?}
=> []
当我进入mongo shell时,做:
var cursor = db.updates.find({}, {'_id': 1}).limit(600);
while (cursor.hasNext()) printjson(cursor.next());
我返回 454 行。
var cursor = db.updates.find({}, {'_id': 1}).sort({created_at : 1}).limit(600);
while (cursor.hasNext()) printjson(cursor.next());
还会返回 454 行。
db.updates.find({}).sort({created_at: -1}).limit(1);
从2月23日开始返回更新。但我昨天在MongoDB上有更新。 有任何想法吗?
我的模特是:
class Update
include Mongoid::Document
include Mongoid::Timestamps
include Paperclip
field :body
...
index [[ :created_at, Mongo::DESCENDING ]]
...
named_scope :ordered, :order_by => ([[:created_at, :desc]])
...
end
答案 0 :(得分:0)
可以打印出created_at
字段吗?
db.updates.find({}, {created_at:1}).sort({created_at: -1}).forEach(printjson)
您可能在如何保存日期字段时遇到问题。输出有字符串吗? ISODate()?
答案 1 :(得分:0)
我没弄清楚为什么,但是做以下事情似乎解决了这个问题:
named_scope:ordered,:order_by => ([[:created_at,:desc],[:_ id,:desc]])
似乎辅助排序有帮助。
irb(main):022:0> update = Update.order_by([[:created_at, :desc], [:_id, :desc]])
irb(main):025:0> update.count
=> 556
irb(main):026:0> update.first.created_at
=> Sat May 28 02:53:33 -0700 2011
irb(main):027:0> update.second.created_at
=> Fri May 27 17:55:38 -0700 2011
irb(main):028:0> update.first.created_at.class
=> Time
irb(main):029:0> update.second.created_at.class
=> Time
其中第一个被排除在原始查询之外。