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

MongoDB $ukuran

Di MongoDB, $size operator pipa agregasi menghitung dan mengembalikan jumlah total item dalam larik.

$size operator menerima satu argumen. Argumen dapat berupa ekspresi valid apa pun yang diselesaikan ke array.

Contoh

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

{ "_id" : 1, "data" : [ ] }
{ "_id" : 2, "data" : [ "a" ] }
{ "_id" : 3, "data" : [ "a", "b" ] }
{ "_id" : 4, "data" : [ "a", "b", "c" ] }
{ "_id" : 5, "data" : [ 1, 1, 1, 1 ] }

Kita bisa menggunakan $size untuk mengembalikan jumlah item dalam larik di masing-masing data bidang.

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

Hasil:

{ "data" : [ ], "result" : 0 }
{ "data" : [ "a" ], "result" : 1 }
{ "data" : [ "a", "b" ], "result" : 2 }
{ "data" : [ "a", "b", "c" ], "result" : 3 }
{ "data" : [ 1, 1, 1, 1 ], "result" : 4 }

Array Bersarang

$size operator tidak turun ke array bersarang dan menghitung elemennya. Ini mengevaluasi array dari tingkat atas.

Misalkan kita memiliki dokumen berikut dalam koleksi kita:

{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }

Dan kami menerapkan $size untuk itu:

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

Hasil:

{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }

Array bersarang dihitung sebagai satu elemen (terlepas dari berapa banyak elemen yang dikandungnya).

Tipe Data Salah

Argumen dapat berupa ekspresi apa pun yang valid, selama argumen tersebut diselesaikan ke array. Jika tidak menyelesaikan ke array, kesalahan dihasilkan.

Misalkan kita memiliki dokumen berikut:

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

data bidang tidak menyelesaikan ke array.

Inilah yang terjadi ketika kita menerapkan $size ke bidang itu:

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

Hasil:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "The argument to $size must be an array, but was of type: double",
	"code" : 17124,
	"codeName" : "Location17124"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Pesan kesalahan memberi tahu kita bahwa The argument to $size must be an array, but was of type: double .

Bidang Tidak Ada

Jika bidang tidak ada dalam dokumen, kesalahan akan ditampilkan.

Misalkan kita memiliki dokumen berikut:

{ "_id" : 8 }

Dan kami menerapkan $size ke dokumen itu:

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

Hasil:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "The argument to $size must be an array, but was of type: missing",
	"code" : 17124,
	"codeName" : "Location17124"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. perbedaan antara agregat ($cocok) dan temukan, di MongoDB?

  2. 2 Cara Menampilkan Indeks di MongoDB

  3. Bagaimana cara mengakses MongoDB Meteor dari klien lain, saat Meteor sedang berjalan?

  4. Cascading Kustom di Spring Data MongoDB

  5. MongoDB :kerangka kerja agregasi :$cocok antar bidang