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

MongoDB encontra correspondência exata de matriz, mas a ordem não importa


A resposta atualmente aceita NÃO garante uma correspondência exata em sua matriz, apenas que o tamanho é idêntico e que a matriz compartilha pelo menos um item com a matriz de consulta.

Por exemplo, a consulta
db.coll.find({ "hobbies": { "$size" : 2, "$in": [ "2", "1", "5", "hamburger" ] }  });

ainda retornaria o usuário kaushik nesse caso.

O que você precisa fazer para obter uma correspondência exata é combinar $size com $all , igual a:
db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "1" ] }  });

Mas esteja ciente de que isso pode ser uma operação muito cara, dependendo da sua quantidade e estrutura de dados. Como o MongoDB mantém a ordem dos arrays inseridos estável, você pode se sair melhor ao garantir que os arrays estejam em uma ordem classificada ao inserir no banco de dados, para que você possa confiar em uma ordem estática ao consultar.