• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Удалить все документы в категоризированной вью.

  • Автор темы Jooz
  • Дата начала
J

Jooz

Коллеги, имеется ли такая возможность?

Есть вьюшка в которой тысячи категорий, в каждой категории может быть от 1 до 100 документов, внутри категории доки отсортированы по дате. Задача: в каждой категории оставить только 1 документ.

Подскажите имена классов которыми можно порешать эту проблему.

Делать циклом, т.е. проверять уникальность документа по отношению к другому это 20 000 на 20 000 операция, т.е. 2 суток работы агента. Нужно сделать быстрее. Для этого и создал вью, где уже нужно только пробежаться по категориям и шлепнуть хвост. А вот как, что не докумекаю.
 
H

hosm

Для разовой задачи в качестве идеи - сделать вьюху с флагом Generate Unique Keys in Index и оставить только эти документы? (ну, кинуть их в папку или каким-то уникальным полем отметить)
 
N

nvyush

К сожалению задача ежедневная.
В этом случае, КМК, проще при добавлении новых документов проверять, нет ли уже таких же в категории и, если есть, помечать в спецполе как "подлежащий чистке". Сделать представление по данному спецполю и удалять агентом все документы в данном представлении.
 
X

Xalet

Делать циклом, т.е. проверять уникальность документа по отношению к другому это 20 000 на 20 000 операция, т.е. 2 суток работы агента. Нужно сделать быстрее. Для этого и создал вью, где уже нужно только пробежаться по категориям и шлепнуть хвост. А вот как, что не докумекаю.

А зачем каждый к каждому? Делается в один проход. Уникальные значения скидывать в лист(как вариант). В каждом доке брать поле категории и смотреть, есть ли оно в листе. Если нет, то добавить в лист, док не трогать, если есть, док в мусор...
 
J

Jooz

NotesViewNavigator - отличная идея, помогло!!!

Добавлено:
А зачем каждый к каждому? Делается в один проход. Уникальные значения скидывать в лист(как вариант). В каждом доке брать поле категории и смотреть, есть ли оно в листе. Если нет, то добавить в лист, док не трогать, если есть, док в мусор...
Тоже не быстро, когда у Вас массив вырастит до 1000 записей и более, каждый новый документ вы будите прогонять по этому массиву. Т.е. вначале ф-ия работать будет быстро, а потом начнет замедляться и "фактически" придет 1 к 1.
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
NotesViewNavigator - отличная идея, помогло!!!
если во вьюшке сделать Total то оч шустро будет...

Код:
%REM
Agent $MessageID
Удаляет из журнальной базы письма с одинаковыми $MessageID 
Created 20.03.2010 by Rinat N. Karimov/TAPB/RU
Description: Comments for Agent
%END REM
Option Public
Option Declare

Sub Initialize()
Dim s As New NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim nv As NotesViewNavigator
Dim en As NotesViewEntry
Dim cl As NotesDocumentCollection
Dim doc As NotesDocument
Dim cnt As Long
Dim va (1) As String
va(0)="$MessageID"
va(1)="$MessageID2"
Set db=s.Currentdatabase
ForAll vn In va
Set v=db.Getview(vn)
Call v.Refresh()
v.Autoupdate=False
Set nv=v.Createviewnav()
Set en=nv.Getfirst()
Do While Not en Is Nothing
' Columnvalues(3) содержит totals категории...
If en.Columnvalues(3)>1 Then
'Print en.Columnvalues(0) & "--" &en.Columnvalues(3)
Set cl=v.Getalldocumentsbykey(en.Columnvalues(0),True)
Set doc=cl.Getfirstdocument()
Call cl.Deletedocument(doc)
Call cl.Removeall(True)
End If
cnt=cnt+1
Set en=nv.Getnextcategory(en)
Loop
'Print "Done..." &cnt
End ForAll
End Sub
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!