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

MongoDB $ isArray

Trong MongoDB, bạn có thể sử dụng $isArray toán tử đường ống tổng hợp để kiểm tra xem một giá trị có phải là một mảng hay không.

Nó chấp nhận bất kỳ biểu thức hợp lệ nào và trả về true nếu biểu thức là một mảng, false nếu không.

Ví dụ

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

{ "_id" : 1, "data" : [ ] }
{ "_id" : 2, "data" : [ 1, 2, 3 ] }
{ "_id" : 3, "data" : [ "XS", "M", "L" ] }
{ "_id" : 4, "data" : 123 }
{ "_id" : 5, "data" : "Homer Jay" }

Chúng ta có thể sử dụng mã sau để kiểm tra data trường cho mảng:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Kết quả:

{ "_id" : 1, "data" : [ ], "result" : true }
{ "_id" : 2, "data" : [ 1, 2, 3 ], "result" : true }
{ "_id" : 3, "data" : [ "XS", "M", "L" ], "result" : true }
{ "_id" : 4, "data" : 123, "result" : false }
{ "_id" : 5, "data" : "Homer Jay", "result" : false }

Chúng ta có thể thấy rằng ba tài liệu đầu tiên chứa mảng và hai tài liệu còn lại thì không.

Ngoài ra, chúng ta có thể thấy rằng tài liệu đầu tiên chứa một mảng trống. Đó vẫn là một mảng và vì vậy $isArray trả về true .

Ví dụ 2

Dưới đây là một ví dụ khác chứa nhiều trường thuộc các loại BSON khác nhau.

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

{
	"_id" : ObjectId("601738d7c8eb4369cf6ad9de"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75"),
	"object" : {
		"a" : 1
	},
	"array" : [
		1,
		2,
		3
	]
}

Với mục đích của bài viết này, tôi đã đặt tên cho mỗi trường để phản ánh loại BSON của nó.

Bây giờ chúng tôi có thể sử dụng mã sau để trả về true hoặc false cho mỗi trường, tùy thuộc vào trường có phải là một mảng hay không:

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: { $isArray: "$_id" },
          double: { $isArray: "$double" },
          string: { $isArray: "$string" },
          boolean: { $isArray: "$boolean" },
          date: { $isArray: "$date" },
          integer: { $isArray: "$integer" },
          long: { $isArray: "$long" },
          decimal: { $isArray: "$decimal" },
          object: { $isArray: "$object" },
          array: { $isArray: "$array" }
        }
    }
  ]
).pretty()

Kết quả:

{
	"_id" : false,
	"double" : false,
	"string" : false,
	"boolean" : false,
	"date" : false,
	"integer" : false,
	"long" : false,
	"decimal" : false,
	"object" : false,
	"array" : true
}

Thiếu trường

Áp dụng $isArray đến một trường không tồn tại dẫn đến false .

Giả sử test của chúng tôi bộ sưu tập chứa tài liệu sau:

{ "_id" : 6 }

Và chúng tôi áp dụng $isArray vào tài liệu đó:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 6 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Kết quả:

{ "_id" : 6, "result" : false }

Giá trị rỗng

Áp dụng $isArray thành null trả về false .

Giả sử test của chúng tôi bộ sưu tập chứa tài liệu sau:

{ "_id" : 7, "data" : null }

Và chúng tôi áp dụng $isArray vào tài liệu đó:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 7 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Kết quả:

{ "_id" : 7, "data" : null, "result" : false }

Giá trị không xác định

Tương tự như vậy, việc cung cấp các giá trị không xác định sẽ trả về false .

Giả sử test của chúng tôi bộ sưu tập chứa tài liệu sau:

{ "_id" : 8, "data" : undefined }

Áp dụng $isArray :

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 8 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Kết quả:

{ "_id" : 8, "data" : undefined, "result" : false }

  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. MongoDB GPG - Chữ ký không hợp lệ

  3. Làm cách nào để chèn một phần tử vào danh sách nội bộ MongoDB?

  4. Định dạng một số dưới dạng phần trăm trong SQL

  5. Pymongo / MongoDB:tạo chỉ mục hay đảm bảo chỉ mục?