MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

È possibile cambiare il dividendo e il divisore dell'operatore di query $mod di MongoDB?

Un normale .find interrogare con $mod l'operatore non funzionerà qui, ma puoi comunque farlo utilizzando il framework di aggregazione e $redact operatore e $mod operatore di aggregazione aritmetica.

Supponiamo di avere i seguenti documenti nella nostra collezione:

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

La query seguente restituisce tutti quei documenti in cui 60 modulo il valore del campo a è uguale a 0 .

db.collection.aggregate([
    { "$redact": { 
        "$cond": [ 
            { "$eq": [ {"$mod": [ 60, "$a" ] }, 0 ] }, 
            "$$KEEP", 
            "$$PRUNE"
        ]
    }}
])

che produce:

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

Un altro modo probabilmente meno efficiente per farlo è usare $where operatore.

db.collection.find("60 % this.a === 0")