MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Est-il possible de changer le dividende et le diviseur de l'opérateur de requête $mod de MongoDB ?

Un .find régulier requête avec le $mod L'opérateur ne fonctionnera pas ici, mais vous pouvez toujours le faire en utilisant le cadre d'agrégation et le $redact opérateur et le $mod opérateur d'agrégation arithmétique.

Supposons que nous ayons les documents suivants dans notre collection :

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

La requête suivante renvoie tous les documents où 60 modulo la valeur du champ a est égal à 0 .

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

qui produit :

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

Une autre façon probablement moins efficace de le faire est d'utiliser le $where opérateur.

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