sql >> Database >  >> NoSQL >> MongoDB

MongoDB $cmp

In MongoDB is de $cmp aggregatiepijplijnoperator vergelijkt twee waarden en retourneert ofwel -1 , 1 , of 0 , afhankelijk van of de eerste waarde kleiner dan, groter dan of gelijk is aan de eerste waarde.

In het bijzonder de $cmp operator geeft terug:

  • -1 als de eerste waarde kleiner is dan de tweede.
  • 1 als de eerste waarde groter is dan de tweede.
  • 0 als de twee waarden equivalent zijn.

Voorbeeld

Stel dat we een verzameling hebben met de naam data met de volgende documenten:

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

We kunnen de $cmp . gebruiken operator om de a . te vergelijken en b velden:

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

Resultaat:

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

Verschillende soorten vergelijken

De $cmp operator vergelijkt zowel waarde als type, met behulp van de gespecificeerde BSON-vergelijkingsvolgorde voor waarden van verschillende typen.

Stel dat we de volgende documenten aan onze collectie toevoegen:

{ "_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 }

Dit is wat er gebeurt als we $cmp toepassen naar de nieuwe documenten:

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

Resultaat:

{
	"_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 }

  1. Tips voor het opslaan van MongoDB-back-ups in de cloud

  2. python-rq worker sluit automatisch

  3. Redis:Kan .rdb niet openen voor opslaan:Toestemming geweigerd

  4. Waarom hebben we een 'arbiter' nodig in MongoDB-replicatie?