我正处于mongodb的学习阶段。
我有一个测试网站项目,故事的每一步都是domain.com/step 例如,通过domain.com/14
访问步骤14换句话说,对于上述情况,我需要访问我的收藏中的第14个文件来提供服务。
到目前为止,我一直在使用find().skip(n).limit(1)
方法返回n
文档,但是当有太多文档需要跳过时,它变得非常慢。所以我需要一种更有效的方法来获取我的集合中的n
文档。
任何想法都表示赞赏。
答案 0 :(得分:3)
在文档中添加一个字段,告诉您它是哪一步,为该字段添加索引并按其查询。
文件:
{
step:14
text:"text",
date:date,
imageurl:"imageurl"
}
指数:
db.collection.createIndex({step:1});
查询:
db.collection.find({step:14});
依靠集合中的自然顺序不仅缓慢(如你所知),它也是不可靠的。当您开始一个新的集合并插入一堆文档时,您通常会按照插入它们的顺序找到它们。但是当您在插入文档后更改文档时,可能会发生订单以不可预测的方式搞乱。所以永远不要依赖插入顺序。
例外:Capped Collections保证广告订单保持一致。但是很少有用例,这些用法非常有用,而且我认为你没有这种情况。