2015-08-12 2 views
0

Как удалить все документы, хранящиеся в объекте Mongo::Collection::View::Aggregation?удаление всех документов в Mongo :: Collection :: View :: Aggregation

EDIT1

Мне нужно удалить все документы, имеющие самый высокий счет-фактуру для каждого клиента. Я могу получить все документы, которые я хочу удалить, со следующим кодом:

collection.find.aggregate([ 
{ :$group => { _id: "$customer_id", highest: { :$max => "$invoice" }}} 
]) 

Теперь Как я могу удалить все из них?

Благодаря

+1

Что вы подразумеваете под "delete them"? Вы имеете в виду, что у вас есть результат агрегирования, который указывает на документы, которые вы хотите удалить? Требуется более подробная информация о том, что вы здесь задаете. –

+0

Можете ли вы показать нам, как выглядит ваш результат? –

+0

a Mongo :: Collection :: View :: Aggregation – macsig

ответ

0

В оболочке вы можете использовать Foreach итерировать результаты и удаление каждого документа.

collection.find.aggregate([{ :$group => { _id: "$customer_id", highest: { :$max => "$invoice" }}}]) 
.forEach(function(row){ 
    collection.remove({customer_id: row._id}); 
}) 
+0

спасибо, но это не похоже на правильное Ruby – macsig

+0

Это пример оболочки mongo; но я считаю, что для рубина вы можете добиться аналогичного результата, используя базовый цикл. Насколько я знаю, нет никакой команды для удаления результатов агрегации; поэтому вам нужно использовать какую-то структуру цикла для повторения набора результатов. – cubbuk

+0

есть проблема с решением выше. В моей коллекции у меня есть много документов с одним и тем же customer_id, и я хочу удалить только тот, у которого самый высокий счет. Мои агрегатные наборы _id как customer_id, и удаление удаляет весь документ с помощью customer_id из коллекции, а не только тот, который я желаю. – macsig

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