【发布时间】:2011-12-23 20:41:44
【问题描述】:
John Nunemaker 有一篇博客文章,其中包含一些关于 Mongo ObjectIds 的好技巧 -- http://mongotips.com/b/a-few-objectid-tricks/ -- 特别是我对 generation_time 的技巧很感兴趣。他建议不必将 created_at 时间显式存储在 mongo 文档中,因为您始终可以从 ID 中提取它,这引起了我的注意。问题是如果我只有 id,我无法弄清楚如何在 mongomapper 中生成 mongo 查询以根据创建时间查找文档。
如果我将密钥 :created_at 作为文档的一部分存储,我可以在 mongomapper 中进行查询,以获取自 12 月 1 日以来创建的所有文档,如下所示:
Foo.where(:created_at.gt=>Time.parse("2011-12-01"))
(映射到:
{created_at: {"$gt"=>Thu Dec 01 06:00:00 UTC 2011}}
我不知道如何使用 ObjectId 进行等效查询。我想它看起来像这样(虽然很明显 generation_time 是一个 ruby 函数,但是我可以在 objectid 上使用等效的mongo 查询的上下文?)
Foo.where('$where'=>"this.id.generation_time > new Date('2011-12-01')")
{$where: "this.id.generation_time > new Date('2011-12-01')"}
还有一个问题:如果我放弃存储单独的时间戳,如果我使用 mongodump 转储和恢复我的数据库,我会丢失时间戳元数据吗?是否有推荐的备份/恢复技术来保留 ObjectId?
【问题讨论】:
标签: ruby-on-rails-3 mongodb mongomapper