0

我正在尝试使用 mongodb 的 ObjectID 对给定集合的插入时间进行范围查询。我真的找不到任何可能的文档,除了这个博客条目: http: //mongotips.com/b/a-few-objectid-tricks/

我想获取在给定时间戳之后创建的所有文档。使用 nodejs 驱动程序,这就是我所拥有的:

var timeId = ObjectId.createFromTime(timestamp);
var query = {
    localUser: userId,
    _id: {$gte: timeId}
};
var cursor = collection.find(query).sort({_id: 1});

我总是得到相同数量的记录(27 个集合中的 19 个),与时间戳无关。我注意到 createFromTime 仅填充与时间相关的 objectid 中的字节,其他字节保留为 0(如:4f6198be0000000000000000)。

我尝试为此使用 ObjectID 的原因是,在 mongodb 服务器上插入文档时我需要时间戳,而不是在将文档传递给 node.js 中的 mongodb 驱动程序时需要时间戳。

任何人都知道如何使这项工作,或者有另一个想法如何生成和查询在 mongodb 服务器上生成的插入时间?

4

1 回答 1

0

不确定 ruby​​ 中的 nodejs 驱动程序,您可以像这样简单地应用范围查询。

jan_id = BSON::ObjectId.from_time(Time.utc(2012, 1, 1))       

feb_id = BSON::ObjectId.from_time(Time.utc(2012, 2, 1)) 

@users.find({'_id' => {'$gte' => jan_id, '$lt' => feb_id}})

确保 var timeId = ObjectId.createFromTime(timestamp)正在创建一个 ObjectId。

也可以尝试不使用 localuser 进行查询

于 2012-06-25T15:40:46.340 回答