2015-08-08 55 views
2

我处于mongodb的学习阶段。从集合中获取第n个项目

我有一个测试网站项目,其中一个故事的每一步都是domain.com/step 例如,第14步是通过domain.com/14

换句话说访问,对于上述情况,我需要访问我的收藏中的第14个文档才能使用它。

我一直在使用find().skip(n).limit(1)这个方法来返回n th文件,但是当文件太多时,它会变得非常慢。所以我需要一种更有效的方式来获取我的收藏中的文档n

任何想法表示赞赏。

+0

远程分页通常是这种情况,来自Google的一些示例http://stackoverflow.com/questions/7228169/slow-pagination-over-tons-of-records-in-mongo http://stackoverflow.com/问题/ 9703319/mongodb-ranged-pagination http://blog.mongodirector.com/fast-paging-with-mongodb/ – Sammaye

+0

投票下来,没有任何评论 - 非常有建设性的举措。 – Mia

+0

@Sammaye谢谢你的链接,但是我看到他们,他们不是我的问题的答案。我不在寻找分页,我需要直接访问domain.com/step链接 - 第二和第三个链接完全是关于skip的分页,第一个链接没有答案,但是一个建议:“不要使用它” 所有这些实际上是我的问题在这里的原因。 – Mia

回答

1

在您的文档中添加一个字段,告诉您它是哪一步,向该字段添加索引并按该字段进行查询。

文件:

{ 
    step:14 
    text:"text", 
    date:date, 
    imageurl:"imageurl" 
} 

指数:

db.collection.createIndex({step:1}); 

查询:

db.collection.find({step:14}); 

集合中的自然顺序为依托的不仅仅是慢(如你发现了),它也是不可靠的。当你开始一个新的集合并插入一堆文档时,通常会按照插入它们的顺序找到它们。但是,当您在插入文档后更改文档时,可能会发生订单以不可预知的方式混乱。所以永远不要依赖插入顺序一致。

例外:Capped Collections保证广告订单保持一致。但是这些实用程序的使用情况非常少,我不认为你在这里有这种情况。