#mongodb #aggregation-framework #mongo-shell
Вопрос:
У меня огромный массив, и мне нужно получить только индексы массива, кратные 12. Я думал использовать $filter
, но у меня проблемы с cond
параметром.
Я использую aggregate, потому что мне нужно сделать еще кое-что, но я застрял в этой части фильтра.
data : [3,4,5,6,...,etc, lt;more 5000 itemsgt; ]
запрос:
db.test.aggregate([{$project:{filtered_values: {$filter:{input: '$data', as:data ,cond: { ??? some witchcraft ???} }}}}])
Ожидаемый результат:
[data[0],data[12],data[24],data[36],data[i ===0]]
Как я могу достичь этого результата с помощью aggregate? Или если это $filter
лучшее решение?
Ответ №1:
Попробуй это:
db.collection.aggregate([ { $set: { data: { $map: { input: { $range: [0, { $size: "$data" }, 12] }, as: "i", in: { $arrayElemAt: ["$data", "$i"] } } } } } ])
Комментарии:
1. Решено довольно хорошо! Спасибо!
2. В этом случае, пожалуйста, примите ответ.