MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $cmp

В MongoDB, $cmp Операторът на конвейера за агрегиране сравнява две стойности и връща -1 , 1 или 0 , в зависимост от това дали първата стойност е по-малка, по-голяма или равна на първата стойност.

По-конкретно, $cmp операторът връща:

  • -1 ако първата стойност е по-малка от втората.
  • 1 ако първата стойност е по-голяма от втората.
  • 0 ако двете стойности са еквивалентни.

Пример

Да предположим, че имаме колекция, наречена data със следните документи:

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

Можем да използваме $cmp оператор за сравнение на a и b полета:

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

Резултат:

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

Сравняване на различни типове

$cmp оператор сравнява както стойност, така и тип, като използва посочения ред за сравнение на BSON за стойности от различни типове.

Да предположим, че добавяме следните документи към нашата колекция:

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

Ето какво се случва, когато приложим $cmp към новите документи:

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

Резултат:

{
	"_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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $oid срещу ObjectId

  2. MongoDB като съхранение на файлове

  3. Добавете водещи нули в SQL

  4. намерете идентификатора на последния поддокумент, вмъкнат в mongoose

  5. как да освободя кеширането, което се използва от Mongodb?