MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Ist es möglich, den Dividenden und den Divisor des $mod-Abfrageoperators von MongoDB zu wechseln?

Ein normaler .find Abfrage mit dem $mod Der Operator funktioniert hier nicht, aber Sie können dies dennoch mit dem Aggregation Framework und dem $redact -Operator und $mod arithmetischer Aggregationsoperator.

Angenommen, wir haben die folgenden Dokumente in unserer Sammlung:

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

Die folgende Abfrage gibt alle Dokumente zurück, in denen 60 modulo der Wert des Feldes a gleich 0 .

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

was produziert:

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

Ein anderer wahrscheinlich weniger effizienter Weg, dies zu tun, ist die Verwendung des $where Betreiber.

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