我有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
也不保证有序。
你有什么线索可以解决这个问题吗?
答案 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 );