0

我有 mongo 集合,其中包含如下文件:

{
  _id: [ObjectId]
  writeDate: [DateTime]
  publishDate: [DateTime]
  ...
}

我通常会先显示此类文档的列表,publishDate然后再按writeDate.

现在,当我收到给定文档时,_id我需要获取包含以下内容的列表:2 个先前的文档、此文档和 2 个下一个文档。所以它应该如下所示:

[1,2,4,3,6,7,8,5,9,0] 

如果给定的 id 是 6 我应该得到

[4,3,6,7,8]

如果 id 是 4 我应该得到

[1,2,4,3,6]

问题是发布日期可能是相同的(然后我另外排序writeDate),所以我想我不能只使用$gte$lte给定文档的日期进行排序。也不_id保证是有序的。

你对如何做到这一点有任何线索吗?

4

1 回答 1

0

您不能在一个查询中执行此操作,但您必须使用三个来代替:

// current
r = db.so.findOne( { _id: 6 } );

// previous 2
db.so
    .find( { publishDate: { $lte: r.publishDate }, _id: { $ne: 6 } )
    .sort( { publishDate: -1 } )
    .limit( 2 );

// next 2
db.so
    .find( { publishDate: { $gte: r.publishDate }, _id: { $ne: 6 } )
    .sort( { publishDate: 1 } )
    .limit( 2 );
于 2013-08-06T11:44:44.670 回答