MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB desenrola vários arrays


A partir da versão 3.2 você pode fazer isso com $unwind em ambos os arrays, $cmp os índices e $match apenas os índices iguais.

Esta solução preencherá o que você escreveu caso você tenha apenas o documento de exemplo. Se você tiver mais documentos, não sei o que você espera obter na saída, mas é solucionável agrupando por _id do documento.
db.test.aggregate([
    {
        $unwind: {
            path: '$dates',
            includeArrayIndex: 'dates_index',
        }
    },
    {
        $unwind: {
            path: '$numbers',
            includeArrayIndex: 'numbers_index',
        }
    },
    {
        $project: {
            dates: 1,
            numbers: 1,
            compare: {
                $cmp: ['$dates_index', '$numbers_index']
            }
        }
    },
    {
        $match: {
            compare: 0
        }
    },
    {
        $project: {
            _id: 0,
            dates: 1,
            numbers: 1
        }
    }
])