2013-01-07 75 views
0

我不知道如何使用mongodb(id表示數據庫中的插入順序)從id範圍進行搜索。Mongodb通過創建範圍的id quering

示例:我想從元素的id 0仰望元素的id 19 - >首先20個元素

由於我真的存儲的ObjectId,我如何查找對於這種搜索?

我的結構:

{ 「_id」:物件( 「50e9ccb30364a89b9b286f7a」), 「dataCriacao」:日期(1357499571496), 「電子郵件」: 「[email protected]」, 「諾姆」:「 Daniel「,」version「:0}

我需要創建一個單獨的id號嗎?

感謝,

丹尼爾

回答

1

您可以排序和過濾_id就像你可以與任何其他領域。爲了得到第一個20:

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

然而,儘管ObjectId值與他們創造的一秒分辨率時間戳,並不能保證,如果記錄由多個創建他們嚴格按照創建時間排序開始客戶端ObjectId通常創建驅動程序端(而不是由MongoDB服務器集中)。

0

要查找前20位用戶(例如):

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

如果你想要做例如之間的搜索ObjectId("50ea0918ec661588c2000001")ObjectId("50ea0918ec661588c200000c")

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

然而,ObjectId是基於數目的字段中產生(參見鏈接)。不能保證它們將按照邏輯順序。

+0

好了,只是爲了得到它直,如果我這樣做︰db.users.find({_ id:1})。limit(20)and than db.users.find({_ id:20})。limit(20)沒有任何保證我會得到40個不同的元素數據庫? – user1953756

+0

不,自_id:20永遠不會存在。默認_id的外觀類似於'50ea0918ec661588c2000001'。你可以做db.users.find({_id:{$ gt:}})。limit(20)。這將返回20個文檔,其ObjectId大於您在上一個查詢中拉出的最後一個。該查詢默認按_id排序。 –

1

添加一個CreatedOn日期字段並對其進行排序。

Id排序是一個壞主意,因爲:
- 他們不能保證增量
- 他們不包換被用作商業價值