2014-01-15 2 views
0

У меня есть документ со многими объектами и несколькими агрегатными процессорами, которые работают на них. Допустим, что имя документа объектов - это объекты. Для одного процессора я создал другой документ под названием ProcessedObjects, в котором каждый экземпляр является объектом, который содержит одно поле «processObjectPtr», которое является ссылкой на объект.Документы списка MongoDB не в другом списке

Я хотел бы запустить следующий основной цикл:

for all objects that haven't been processed yet: 
    1 - process object 
    2 - add object to processed object list 

ту часть, которую я не знаю, как это сделать в MongoDB, чтобы получить список объектов, которые не были обработаны еще. Теоретически я мог бы пометить сам объект как обработанный, добавив к нему другое поле, но когда у меня будет много процессоров, которые будут уродливыми, именно поэтому я предпочитаю хранить «список обработанных объектов» в отдельном документе.

Есть ли элегантный способ сделать это, или мне нужно добавить обработанные метаданные к реальным объектам? Я использую mongoengine, но любой ответ будет выполнен.

Спасибо!

+0

Вы должны попробовать Карты, чтобы добиться этого. См. Пример здесь http://stackoverflow.com/questions/8772936/get-data-from-collection-b-not-in-collection-a-in-a-mongodb-shell-query –

+1

В итоге я добавил список обработанных флагов для моих объектов, поэтому каждый процессор может отметить (через флаг), что он уже обработал этот объект, а также запросить, какие объекты не имеют флага. – Noam

+0

@Noam: Поскольку вы решили свой собственный вопрос, я думаю, вы также можете опубликовать это как ответ ;-) – Stennie

ответ

0

В итоге я добавил список «обработанных флагов» к моим объектам, поэтому каждый процессор мог отметить (через флаг), что он уже обработал этот объект, а также запросить, какие объекты не имеют флага.

Смежные вопросы