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

Nhà điều hành đường ống tổng hợp MongoDB $ eq

Trong MongoDB, $eq toán tử đường ống tổng hợp so sánh hai giá trị và trả về true hoặc false , tùy thuộc vào việc hai giá trị có tương đương hay khô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" : 250, "b" : 250 }
{ "_id" : 2, "a" : 250, "b" : 100 }

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

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $eq: [ "$a", "$b" ] }
          }
     }
   ]
)

Kết quả:

{ "_id" : 1, "a" : 250, "b" : 250, "isEquivalent" : true }
{ "_id" : 2, "a" : 250, "b" : 100, "isEquivalent" : false }

Trong tài liệu đầu tiên, ab các trường tương đương nhau, dẫn đến giá trị trả về là true . Nhưng trong tài liệu thứ hai, chúng không tương đương với nhau, dẫn đến giá trị trả về là false .

So sánh các loại

$eq toán tử so sánh cả giá trị và kiểu bằng cách 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ử bộ sưu tập của chúng tôi chứa các tài liệu sau:

{ "_id" : 3, "a" : 250, "b" : "250" }
{ "_id" : 4, "a" : 250, "b" : NumberDecimal("250") }
{ "_id" : 5, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00") }
{ "_id" : 6, "a" : "2021-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z") }

Chúng tôi có thể áp dụng $eq tới ab các trường của các tài liệu đó:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 3, 4, 5, 6 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $eq: [ "$a", "$b" ] }
          }
     }
   ]
).pretty()

Kết quả:

{ "_id" : 3, "a" : 250, "b" : "250", "isEquivalent" : false }
{ "_id" : 4, "a" : 250, "b" : NumberDecimal("250"), "isEquivalent" : true }
{
	"_id" : 5,
	"a" : NumberDecimal("250"),
	"b" : NumberDecimal("250.00"),
	"isEquivalent" : true
}
{
	"_id" : 6,
	"a" : "2021-01-03T23:30:15.100Z",
	"b" : ISODate("2021-01-03T23:30:15.100Z"),
	"isEquivalent" : false
}

Trong tài liệu 3, cả ab có giá trị 250 , nhưng nếu bạn xem kỹ b , nó là một chuỗi (nó được bao quanh bởi dấu ngoặc kép). Do đó, tài liệu đầu tiên trả về false .

Tài liệu 4 trả về true vì cả hai trường đều chứa 250 và cả hai đều là số. Điều này đúng mặc dù a là một kép và b là một số thập phân.

Tài liệu 5 trả về true bởi vì cả hai đều là số thập phân và cả hai đều có cùng giá trị (ngay cả khi một thứ sử dụng rõ ràng chữ số thập phân và người kia thì không).

Tài liệu 6 trả về false bởi vì, mặc dù giá trị ngày / giờ hoàn toàn giống nhau, chúng sử dụng các kiểu khác nhau để biểu thị ngày đó (a sử dụng chuỗi ngày / giờ và b sử dụng đối tượng Ngày).

Giá trị rỗng

So sánh giá trị với null trả về false , trừ khi cả hai đều null .

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" : 7, "a" : 250, "b" : null }
{ "_id" : 8, "a" : null, "b" : null }

Hãy áp dụng $eq đối với các tài liệu đó:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 7, 8 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $eq: [ "$a", "$b" ] }
          }
     }
   ]
)

Kết quả:

{ "_id" : 7, "a" : 250, "b" : null, "isEquivalent" : false }
{ "_id" : 8, "a" : null, "b" : null, "isEquivalent" : true }

Các trường bị thiếu

Nếu một trong các trường bạn đang cố gắng so sánh bị thiếu, hãy $eq trả về false .

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

{ "_id" : 9, "a" : 250 }

Hãy áp dụng $eq vào tài liệu đó:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 9 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $eq: [ "$a", "$b" ] }
          }
     }
   ]
)

Kết quả:

{ "_id" : 9, "a" : 250, "isEquivalent" : false }

Vô cực

So sánh Infinity thành Infinity trả về true .

So sánh -Infinity thành -Infinity trả về true .

So sánh Infinity thành -Infinity trả về false .

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" : 10, "a" : Infinity, "b" : Infinity }
{ "_id" : 11, "a" : -Infinity, "b" : -Infinity }
{ "_id" : 12, "a" : Infinity, "b" : -Infinity }

Hãy áp dụng $eq đối với các tài liệu đó:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 10, 11, 12 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $eq: [ "$a", "$b" ] }
          }
     }
   ]
)

Kết quả:

{ "_id" : 10, "a" : Infinity, "b" : Infinity, "isEquivalent" : true }
{ "_id" : 11, "a" : -Infinity, "b" : -Infinity, "isEquivalent" : true }
{ "_id" : 12, "a" : Infinity, "b" : -Infinity, "isEquivalent" : false }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách cập nhật nhiều phần tử mảng trong mongodb

  2. Cách dễ dàng để dừng mongod trên Mac OS X là gì?

  3. C # mongodb - cách cập nhật các phần tử mảng lồng nhau

  4. Cách tìm bản ghi ngẫu nhiên trong Mongoose

  5. Cách sử dụng Spring Boot với MongoDB