Mongodb通过创造范围的id来查询

时间:2013-01-07 01:04:30

标签: mongodb

我不知道如何使用mongodb从id范围进行搜索(id表示数据库中的插入顺序)。

示例:我想从元素id 0到元素id 19 - >查找前20个元素

由于我存储了ObjectId,我该如何查找这种搜索?

我的结构:

{“_ id”:ObjectId(“50e9ccb30364a89b9b286f7a”),“dataCriacao”:日期(1357499571496),“email”:“danielp@r7.com”,“nome”:“Daniel”,“version” :0}

我是否必须创建一个单独的ID号码?

谢谢,

丹尼尔

3 个答案:

答案 0 :(得分:1)

您可以按_id排序和过滤,就像您可以使用任何其他字段一样。获得前20名:

db.test.find().sort({_id: 1}).limit(20)

但是,虽然ObjectId值以其创建的一秒分辨率时间戳开头,但如果记录由多个客户端创建为{{1},则不能保证它们按创建时间严格排序通常在驱动程序端创建(而不是MongoDB服务器集中创建)。

答案 1 :(得分:1)

添加CreatedOn日期字段并对其进行排序。

Id进行排序是一个坏主意,因为:
- 他们不保证是增量的 - 它们不能被用作商业价值

答案 2 :(得分:0)

查找前20个用户(例如):

db.users.find().limit(20)

如果您想在之间进行搜索,例如ObjectId("50ea0918ec661588c2000001")ObjectId("50ea0918ec661588c200000c")

db.users.find({ _id: { $gt: ObjectId("50ea0918ec661588c2000001"), $lt: ObjectId("50ea0918ec661588c200000c") } })

但是,ObjectId是基于许多字段生成的(请参阅链接)。无法保证它们符合逻辑顺序。