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

É possível alternar o dividendo e o divisor do operador de consulta $mod do MongoDB?


Um .find regular consulta com o $mod operador não funcionará aqui, mas ainda assim, você pode fazer isso usando a estrutura de agregação e o $redact operador e o $mod operador de agregação aritmética.

Suponha que temos os seguintes documentos em nossa coleção:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 },
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 },
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 },
{ "_id" : ObjectId("573f63504c01ce47a183a636"), "a" : 24 }

A consulta a seguir retorna todos os documentos em que 60 modulo o valor do campo a igual a 0 .
db.collection.aggregate([
    { "$redact": { 
        "$cond": [ 
            { "$eq": [ {"$mod": [ 60, "$a" ] }, 0 ] }, 
            "$$KEEP", 
            "$$PRUNE"
        ]
    }}
])

que produz:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 }
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 }
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 }

Outra maneira provavelmente menos eficiente de fazer isso é usar o $where operador.
db.collection.find("60 % this.a === 0")