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ề:
-
-1nếu giá trị đầu tiên nhỏ hơn giá trị thứ hai. -
1nếu giá trị đầu tiên lớn hơn giá trị thứ hai. -
0nế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 a và b 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 }