MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $isArray

Di MongoDB Anda dapat menggunakan $isArray operator pipeline agregasi untuk memeriksa apakah suatu nilai adalah array atau bukan.

Ia menerima ekspresi apa pun yang valid, dan mengembalikan true jika ekspresinya adalah array, false jika tidak.

Contoh

Misalkan kita memiliki koleksi yang disebut test dengan dokumen sebagai berikut:

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

Kita dapat menggunakan kode berikut untuk memeriksa data bidang untuk array:

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

Hasil:

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

Kita dapat melihat bahwa tiga dokumen pertama berisi array dan dua lainnya tidak.

Juga, kita dapat melihat bahwa dokumen pertama berisi array kosong. Itu masih array, jadi $isArray mengembalikan true .

Contoh 2

Berikut contoh lain yang berisi berbagai bidang dengan jenis BSON yang berbeda.

Misalkan kita memiliki koleksi yang disebut types dengan dokumen berikut:

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

Untuk tujuan artikel ini, saya memberi nama setiap bidang untuk mencerminkan jenis BSON-nya.

Sekarang kita dapat menggunakan kode berikut untuk mengembalikan true atau false untuk setiap bidang, bergantung pada apakah bidang tersebut berupa larik atau tidak:

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()

Hasil:

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

Bidang Tidak Ada

Menerapkan $isArray ke bidang yang tidak ada menghasilkan false .

Misalkan test our kami koleksi berisi dokumen berikut:

{ "_id" : 6 }

Dan kami menerapkan $isArray ke dokumen itu:

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

Hasil:

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

Nilai Null

Menerapkan $isArray ke null mengembalikan false .

Misalkan test our kami koleksi berisi dokumen berikut:

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

Dan kami menerapkan $isArray ke dokumen itu:

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

Hasil:

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

Nilai Tidak Terdefinisi

Demikian juga, memberikan nilai yang tidak ditentukan akan mengembalikan false .

Misalkan test our kami koleksi berisi dokumen berikut:

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

Terapkan $isArray :

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

Hasil:

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dokumen unik menggunakan banyak nilai dalam Skema Mongoose

  2. Luwak:findOneAndUpdate tidak mengembalikan dokumen yang diperbarui

  3. Bagaimana cara mengembalikan hasil Mongoose dari metode find?

  4. Yang Perlu Diketahui Saat Mulai Bekerja dengan MongoDB dalam Produksi - Sepuluh Tips

  5. Pilih Max() dengan grup oleh di mongodb