Я бы хотел получить два одинаково больших массива, где оба не содержат null
элементы.
Я могу успешно вернуть два массива, но они содержат null
значения. Когда я исключаю null
значения, они, конечно, не одинаково длинны.
aggregate([
{
$unwind: '$row'
}, {
$match: {
$or: [{
'row.identifier': 'fah'
}, {
'row.identifier': 'agr'
}]
}
}, {
$group: {
_id: '$row.identifier',
rows: {
$push: '$row.value'
}
}
}
]
[[5, null, 64, 34, 1], [53, 31, null, null, 7]]
null
значения все еще присутствуют.
[[5, 1], [53, 7]]
null
значения и значения в одном и том же индексе удаляются.
Вот два примера документов по запросу:
[{ // 1st
row: [{
value: 53,
identifier: 'agj'
}, {
value: 51,
identifier: 'hrw'
}, {
value: null,
identifier: 'rgs'
}]
}, { // 2nd
row: [{
value: null,
identifier: 'agj'
}, {
value: 72,
identifier: 'hrw'
}, {
value: 11,
identifier: 'rgs'
}]
}]
Возможно, есть способ сделать эту фильтрацию в mongodb, я не знаком с этим. Но в javascript вы можете написать функцию фильтра, такую как:
var notNullFilter = function(inputs){
var outputs = [];
for (var i=0; i<inputs.length; i++){
outputs.push([]);
}
for (var k=0; k<inputs[0].length; k++){
var isNull = false;
for (var j=0; j<inputs.length; j++){
if (inputs[k][j] == null){
isNull = true;
break;
}
}
if (!isNull){
for (var l=0; l<inputs.length; l++){
outputs[l].push(inputs[l][k]);
}
}
}
};
Если бы вы использовали библиотеку lodash, это было бы намного проще, но эта функция должна работать.