MongoDB получает некоторый интервал массива

Я хочу получить конкретное поле массива динамически, например:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

В этом массиве сначала я хочу взять 14,15,16, затем [11,12,13] и продолжить.

Я знаю, что у mongoDB есть функция среза, и она дает последний элемент, если я дам ему -1. Но когда я получаю интервал в функции среза, он принимает только положительное значение. Итак, как я могу это сделать?

Примечание. Мой массив динамически растет, и я не хочу каждый раз узнавать длину массива. Потому что, если я это сделаю, мне придется использовать базу данных 2 раза, и я думаю, что это неэффективно.


person Leo S    schedule 12.01.2021    source источник


Ответы (1)


[1,2,3,4,5,6,7,8,9,10,11 (position -6) ,12,13,14 (position -3) ,15,16]

Я думаю, что что-то вроде этого решит вашу проблему:

db.collection.find({},
{
  yourKey: {
    "$slice": [
      -3,
      3
    ]
  }
})

Здесь, считая от последней позиции, вы устанавливаете начальную точку на три позиции назад (на значение 14) и возвращаете три элемента, в этом случае она вернет [14, 15, 16].

Затем для [11, 12, 13]:

db.collection.find({},
{
  yourKey: {
    "$slice": [
      -6,
      3
    ]
  }
})
person luckongas    schedule 12.01.2021