MongoDB aggregation: получить следующий и предыдущий элемент [duplicate]

9
задан Alfred 5 February 2012 в 23:53
поделиться

2 ответа

Итак, предположим, что у вас есть такая схема:

{
 _id,
 text    
}

Я полагаю, что _id является mongo ObjectId, поэтому мы имеем дату публикации, и я могу сортировать по нему

что я открыл текущую запись с id, равным ObjectId( "43cc63093475061e3d95369d") (вместо этого я буду использовать curId), и мне нужно знать следующий и предыдущий. Также давайте рассмотрим, что нам нужно получить все посты по порядку отсортированные по дате создания по убыванию:

Получить следующий пост вам может понравиться:

db.posts.find({_id: {$gt: curId}}).sort({_id: 1 }).limit(1)

Получить предыдущий пост вам может понравиться :

db.posts.find({_id: {$lt: curId}}).sort({_id: -1 }).limit(1)

Немного вещей:

  1. Если вы не используете mongodb ObjectId, код не будет работать для вас, но вы все равно можете использовать postDate вместо id и текущего post postDate вместо curId.
  2. Позаботьтесь о порядке при получении следующих / предыдущих сообщений, чтобы получить следующее сообщение, вам нужно сортировать asc, чтобы получить предыдущий пост, вам нужно отсортировать desc.
  3. Я не знаком с мангустом, поэтому над скриптами написаны скрипты оболочки mongodb.
16
ответ дан Andrew Orsich 26 August 2018 в 02:03
поделиться

Найти предыдущий элемент:

Post.findOne({_id: {$lt: curId}}).sort({_id: -1}).exec(cb)

Найти следующий элемент:

Post.findOne({_id: {$gt: curId}}).sort({_id: 1}).exec(cb)
0
ответ дан Gaoping 26 August 2018 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: