Eu tenho uma coleção que se parece com o seguinte (eu simplifiquei muito). Eu preciso consultar qualquer registro que não tenha o mesmo número de entradas clientsAccepted que clientsInvited.
/* 1 */
{
"_id" : ObjectId("5d7b8ab0f1e55a2e4b6ccfa2"),
"title" : "Service AT19",
"customersInvited" : [
429409,
429410,
900
],
"customersAccepted" : [
429409,
429410,
900
],
"groupId" : null,
"deleted" : true,
"deletedDate" : ISODate("2019-10-12T05:59:08.135Z"),
}
Isso é possível com o operador $size? Estou familiarizado com isso ao procurar um número fixo, portanto, meu plano B será adicionar dois campos separados chamados numAccepted e numInvited, atualizá-lo quando o registro for modificado e fazer algo como:
db.collection.find( { "numInvited": { $ne: "numAccepted" } } );
Eu realmente prefiro não manter campos adicionais que não preciso se for possível comparar o tamanho da matriz diretamente. Qualquer conselho que você possa dar sobre isso seria muito apreciado.
O operador $size corresponde a qualquer array com o número de elementos especificado pelo argumento. Nesse caso, você deve comparar o tamanho de dois campos de matriz no mesmo documento. Você não pode usar operadores MongoDB Query Language (MQL) para essa finalidade.
O operador de matriz de agregação
$size
retorna o comprimento de uma matriz. Para usar operadores de agregação em umafind
consulta, você deve usar o operador $expr . Aqui está como é feito:Observe que $size e $ne usados na consulta acima são operadores de agregação.