在MongoDB中查找周围环境的文档

时间:2013-08-06 07:50:38

标签: mongodb

我有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也不保证有序。

你有什么线索可以解决这个问题吗?

1 个答案:

答案 0 :(得分: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 );