2013-08-06 42 views
0

周圍查找文檔我有蒙戈集合中包含的文件:其在MongoDB中

{ 
    _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

有些東西我無法在你的問題就明白了:你說你不能按日期排序依據,因爲多個文件可能共享相同的日期。如果沒有排序順序,則沒有下兩個和前兩個文檔這樣的事情。或者你是用'_id'來排序文件的嗎? –

+0

編輯我的問題。我的意思是'publishDate'可以在幾個文檔上是相同的,所以我有orderAsc(publishDate)和orderAsc(writeDate)。 –

+0

是否可以有重複的發佈和寫入日期? – WiredPrairie

回答

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);