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

MongoDB $ cmp

Dans MongoDB, le $cmp l'opérateur de pipeline d'agrégation compare deux valeurs et renvoie soit -1 , 1 , ou 0 , selon que la première valeur est inférieure, supérieure ou égale à la première valeur.

Plus précisément, le $cmp l'opérateur renvoie :

  • -1 si la première valeur est inférieure à la seconde.
  • 1 si la première valeur est supérieure à la seconde.
  • 0 si les deux valeurs sont équivalentes.

Exemple

Supposons que nous ayons une collection appelée data avec les documents suivants :

{ "_id" : 1, "a" : 2, "b" : 2 }
{ "_id" : 2, "a" : 2, "b" : 3 }
{ "_id" : 3, "a" : 3, "b" : 2 }

Nous pouvons utiliser le $cmp opérateur pour comparer le a et b champs :

db.data.aggregate(
  [
    { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $cmp: [ "$a", "$b" ] }
      }
    }
  ]
)

Résultat :

{ "a" : 2, "b" : 2, "result" : 0 }
{ "a" : 2, "b" : 3, "result" : -1 }
{ "a" : 3, "b" : 2, "result" : 1 }

Comparer différents types

Le $cmp compare à la fois la valeur et le type, en utilisant l'ordre de comparaison BSON spécifié pour les valeurs de différents types.

Supposons que nous ajoutions les documents suivants à notre collection :

{ "_id" : 4, "a" : ISODate("2021-01-03T23:30:15.100Z"), "b" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 5, "a" : 2, "b" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 6, "a" : ISODate("2019-12-08T04:00:20.112Z"), "b" : 2 }
{ "_id" : 7, "a" : null, "b" : 2 }
{ "_id" : 8, "a" : 2, "b" : null }
{ "_id" : 9, "a" : null, "b" : null }
{ "_id" : 10, "a" : Infinity, "b" : 3 }
{ "_id" : 11, "a" : 2, "b" : Infinity }
{ "_id" : 12, "a" : Infinity, "b" : Infinity }

Voici ce qui se passe lorsque nous appliquons $cmp aux nouveaux documents :

db.data.aggregate(
  [
    { $match: { _id: { $nin: [ 1, 2, 3 ] } } },
    { $project: { 
        a: 1,
        b: 1,
        result: { $cmp: [ "$a", "$b" ] }
      }
    }
  ]
).pretty()

Résultat :

{
	"_id" : 4,
	"a" : ISODate("2021-01-03T23:30:15.100Z"),
	"b" : ISODate("2019-12-08T04:00:20.112Z"),
	"result" : 1
}
{
	"_id" : 5,
	"a" : 2,
	"b" : ISODate("2019-12-08T04:00:20.112Z"),
	"result" : -1
}
{
	"_id" : 6,
	"a" : ISODate("2019-12-08T04:00:20.112Z"),
	"b" : 2,
	"result" : 1
}
{ "_id" : 7, "a" : null, "b" : 2, "result" : -1 }
{ "_id" : 8, "a" : 2, "b" : null, "result" : 1 }
{ "_id" : 9, "a" : null, "b" : null, "result" : 0 }
{ "_id" : 10, "a" : Infinity, "b" : 3, "result" : 1 }
{ "_id" : 11, "a" : 2, "b" : Infinity, "result" : -1 }
{ "_id" : 12, "a" : Infinity, "b" : Infinity, "result" : 0 }