MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ cmp

Trong MongoDB, $cmp toán tử đường ống tổng hợp so sánh hai giá trị và trả về -1 , 1 hoặc 0 , tùy thuộc vào việc giá trị đầu tiên nhỏ hơn, lớn hơn hoặc bằng giá trị đầu tiên.

Cụ thể, $cmp toán tử trả về:

  • -1 nếu giá trị đầu tiên nhỏ hơn giá trị thứ hai.
  • 1 nếu giá trị đầu tiên lớn hơn giá trị thứ hai.
  • 0 nếu hai giá trị tương đương.

Ví dụ

Giả sử chúng ta có một tập hợp được gọi là data với các tài liệu sau:

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

Chúng ta có thể sử dụng $cmp toán tử để so sánh ab lĩnh vực:

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

Kết quả:

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

So sánh các loại khác nhau

$cmp toán tử so sánh cả giá trị và kiểu, sử dụng thứ tự so sánh BSON được chỉ định cho các giá trị của các kiểu khác nhau.

Giả sử chúng tôi thêm các tài liệu sau vào bộ sưu tập của mình:

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

Đây là những gì sẽ xảy ra khi chúng tôi áp dụng $cmp sang các tài liệu mới:

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

Kết quả:

{
	"_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. Cách truy vấn mongodb với DBRef

  2. Phân trang theo phạm vi MongoDB

  3. Làm cách nào để thực hiện truy vấn NOT IN trong Mongo?

  4. Mongodb - Sự khác biệt giữa chạy cơ sở dữ liệu mongo và mongod

  5. Cách tốt nhất để lưu trữ MongoDB trên DigitalOcean