У меня есть проблема, которую я не совсем знаю, как решить. Очень надеюсь, что кто-то здесь может помочь мне разобраться, как go об этом.
Представьте, что у меня есть 100 документов, все с полями user_id. Я знаю, что большинство документов принадлежат разным user_id, но документы 1-10 и 20-29 принадлежат одному и тому же user_id.
Что я хочу сделать, так это убедиться, что я вижу только последние два документа всякий раз, когда a один и тот же user_id возвращается подряд более двух раз. Так что если user_id 1 появляется более двух раз подряд, я хочу ограничить эти документы. Я хочу, чтобы это происходило каждый раз, когда это происходит для этого user_id, а не ограничивало его полностью после этого.
Если бы я просто запросил все документы, так как они сейчас проиндексированы, я бы получил такой результат: *
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , ...]
Что я облажаю Ибо мы можем убедиться, что эти группы единиц ограничены двумя документами подряд, например:
[ 1, 1 , 2, 3, 4 , 5, 6, 7, 8, 9, 10, 11, 1, 1 , 12, ...]
Обратите внимание, что здесь происходит 1, 1, ..., 1, 1, ...
, что означает, что строки идентичных пользовательских идентификаторов были сокращены до двух вместо удаления их всех вместе, что привело бы к чему-то вроде:
[ 1, 1 , 2, 3 , 4, 5, 6, 7, 8, 9, 10, 11, 12, ...]
Я также хочу, чтобы это работало, если запрос разбит на страницы (несколько запросов) ,
Итак, представьте, что я запрашиваю первые две страницы размером 5, а затем хочу получить:
Page1: [1, 1, 2, 3, 4 ]
Страница 2: [5, 6, 7, 8, 9]
Вместо:
Страница 1: [ 1, 1, 2, 3, 4]
Page2: [1, 1, 1, 1, 1]
Я надеюсь, что Я описал проблему достаточно хорошо, чтобы кто-то понял. Если нет, то, пожалуйста, дайте мне знать, чтобы я мог попытаться объяснить это по-другому.