Mongodb:从中间跳过集合值(不是正常的分页)

时间:2013-06-13 11:13:03

标签: mongodb mongodb-query morphia

我浏览了各种各样的例子,但未能找到我要找的东西..我想要的是_id搜索特定文档并使用一个查询在集合之间跳过多次?或者一些对我来说足够快的替代方案。

以下查询将跳过第一个并提前返回第二个:

db.posts.find( { "_id" : 1 }, { comments: { $slice: [ 1, 1 ] } } )

那将是skip 0, return 1并将结果留下来......

但是如果会有10000条评论,我会想要使用相同的模式,但返回这样的数组值:

skip 0, return 1, skip 2, return 3, skip 4, return 5

因此,将返回集合,其中评论的大小为5000,因为其中一半被删除了。这可能吗?我应用10000这样的大数字,因为我担心使用多个查询来应用它不会有性能。(例如:multiple queries to accomplish something similar)。日Thnx!

1 个答案:

答案 0 :(得分:0)

我经历了几个资源并得出结论,目前用一个查询无法做到这一点。相反,我同意只有两种方法可以解决这个问题:

1。)进行某种循环并运行多个切片查询,同时增加切片的位置。类似to resource I linked

var skip = NUMBER_OF_ITEMS * (PAGE_NUMBER - 1)
db.companies.find({}, {$slice:[skip, NUMBER_OF_ITEMS]})

但是,根据数据的类型,我不想运行5000个单独的查询来获得只有一半的数组内容,所以我决定使用选项2.)这对我而言似乎相对快速且性能明智。

2。)按_id进行单个查询,然后在将结果返回给客户端或代码的其他部分之前,通过使用for循环跳过不需要的数组项,然后返回结果。我在java方面做了这个,因为我通过morphia与mongo交谈。我也使用查询explain()来mongo,并理解返回带有10000个项目的数组的单行,同时指定_id条件是如此之快,速度不是真正的问题,我打赌切片跳过只会是慢。