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

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

Trong MongoDB, $ne 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ó không 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" : 250, "b" : 250 }
{ "_id" : 2, "a" : 300, "b" : 250 }
{ "_id" : 3, "a" : 250, "b" : 300 }

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

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

Kết quả:

{ "_id" : 1, "a" : 250, "b" : 250, "notEquivalent" : false }
{ "_id" : 2, "a" : 300, "b" : 250, "notEquivalent" : true }
{ "_id" : 3, "a" : 250, "b" : 300, "notEquivalent" : true }

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à false . Nhưng trong tài liệu thứ hai và thứ ba, chúng không tương đương nhau, dẫn đến giá trị trả về là true .

So sánh các loại

$ne 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" : 4, "a" : 250, "b" : "250" }
{ "_id" : 5, "a" : "250", "b" : 250 }
{ "_id" : 6, "a" : 250, "b" : NumberDecimal("250") }
{ "_id" : 7, "a" : NumberDecimal("250"), "b" : 250 }
{ "_id" : 8, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00") }
{ "_id" : 9, "a" : NumberDecimal("250.00"), "b" : NumberDecimal("250") }
{ "_id" : 10, "a" : "2022-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z") }
{ "_id" : 11, "a" : ISODate("2021-01-03T23:30:15.100Z"), "b" : "2021-01-03T23:30:15.100Z" }

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

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5, 6, 7, 8, 9, 10, 11 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $ne: [ "$a", "$b" ] }
          }
     }
   ]
).pretty()

Kết quả:

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

Giá trị rỗng

So sánh giá trị với null trả về true , trừ khi cả hai đều null , trong trường hợp đó, false Được trả lại.

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

{ "_id" : 12, "a" : 250, "b" : null }
{ "_id" : 13, "a" : null, "b" : 250 }
{ "_id" : 14, "a" : null, "b" : null }

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

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 12, 13, 14 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $ne: [ "$a", "$b" ] }
          }
     }
   ]
)

Kết quả:

{ "_id" : 12, "a" : 250, "b" : null, "isEquivalent" : true }
{ "_id" : 13, "a" : null, "b" : 250, "isEquivalent" : true }
{ "_id" : 14, "a" : null, "b" : null, "isEquivalent" : false }

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 $ne trả về true .

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

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

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

Kết quả:

{ "_id" : 15, "a" : 250, "isEquivalent" : true }
{ "_id" : 16, "b" : 250, "isEquivalent" : true }

Vô cực

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

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

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

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" : 17, "a" : Infinity, "b" : Infinity }
{ "_id" : 18, "a" : -Infinity, "b" : -Infinity }
{ "_id" : 19, "a" : Infinity, "b" : -Infinity }
{ "_id" : 20, "a" : -Infinity, "b" : Infinity }

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

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 17, 18, 19, 20 ] } } },
     {
       $project:
          {
            a: 1,
            b: 1,
            isEquivalent: { $ne: [ "$a", "$b" ] }
          }
     }
   ]
)

Kết quả:

{ "_id" : 17, "a" : Infinity, "b" : Infinity, "isEquivalent" : false }
{ "_id" : 18, "a" : -Infinity, "b" : -Infinity, "isEquivalent" : false }
{ "_id" : 19, "a" : Infinity, "b" : -Infinity, "isEquivalent" : true }
{ "_id" : 20, "a" : -Infinity, "b" : Infinity, "isEquivalent" : true }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mã hóa cơ sở dữ liệu MongoDB

  2. Mongoose ghi đè lên tài liệu thay vì các trường `$ set`

  3. mongodb phiên bản 3.0.0 client robomongo mongovue

  4. Cập nhật bộ sưu tập sao băng với id truyền thống

  5. Lưu trữ một số tệp nhỏ (dưới 1MB) bằng MongoDB trong NodeJS KHÔNG CÓ GridFS