Агрегат Mongodb — Как я могу отфильтровать массив по многомерным индексам массива?

#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. В этом случае, пожалуйста, примите ответ.