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

Operator Pipa Agregasi MongoDB $gte

Di MongoDB, $gte operator pipeline agregasi membandingkan dua nilai dan mengembalikan true atau false , tergantung pada apakah nilai pertama lebih besar atau sama dengan nilai kedua atau tidak.

Contoh

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

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

Kita dapat menggunakan $gte operator untuk membandingkan a dan b bidang:

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

Hasil:

{ "a" : 250, "b" : 250, "result" : true }
{ "a" : 300, "b" : 250, "result" : true }
{ "a" : 250, "b" : 300, "result" : false }

Pada dokumen pertama, a dan b bidang setara, yang menghasilkan nilai kembalian true (karena a memang lebih besar dari atau sama dengan b ).

Dalam dokumen kedua a lebih besar dari b , yang menghasilkan nilai kembalian true (sekali lagi karena a memang lebih besar dari atau sama dengan b ).

Di dokumen ketiga, a kurang dari b dan oleh karena itu $gte operator mengembalikan false (karena a tidak lebih besar dari atau sama dengan b ).

Membandingkan Jenis

$gte operator membandingkan nilai dan tipe menggunakan urutan perbandingan BSON yang ditentukan untuk nilai dari tipe yang berbeda.

Misalkan koleksi kami berisi dokumen-dokumen berikut:

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

Kami dapat menerapkan $gte ke a dan b bidang dokumen tersebut:

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

Hasil:

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

Dalam dokumen 4, keduanya a dan b memiliki nilai 250 , tetapi jika Anda melihat lebih dekat pada b , ini adalah string (dikelilingi oleh tanda kutip ganda). Dalam hal ini, $gte mengembalikan false . Jika kita menggunakan $lte sebagai gantinya, ini akan mengembalikan true .

Dokumen 5 juga menggunakan nilai 250, tetapi yang satu adalah dobel dan yang lainnya desimal. Bagaimanapun, ini setara, dan karenanya $gte mengembalikan true .

Demikian pula, dokumen 6 mengembalikan true karena kedua nilai tersebut setara, meskipun yang satu secara eksplisit menggunakan tempat desimal dan yang lainnya tidak.

Dokumen 7 mengembalikan true karena, meskipun nilai tanggal/waktu dalam a lebih besar dari yang ada di b , mereka menggunakan tipe yang berbeda untuk menyatakan tanggal tersebut (a menggunakan string tanggal/waktu dan b menggunakan objek Tanggal). Jika kita menggunakan $lte sebagai gantinya, ini akan mengembalikan true karena urutan perbandingan BSON.

Nilai Null

$gte perbandingan dapat dilakukan terhadap null . Dan membandingkan null ke null mengembalikan true .

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 8, "a" : 250, "b" : null }
{ "_id" : 9, "a" : null, "b" : 250 }
{ "_id" : 10, "a" : null, "b" : null }

Ayo terapkan $gte ke dokumen-dokumen itu:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 8, 9, 10 ] } } },
     {
       $project:
          {
            _id: 0,
            a: 1,
            b: 1,
            result: { $gte: [ "$a", "$b" ] }
          }
     }
   ]
)

Hasil:

{ "a" : 250, "b" : null, "result" : true }
{ "a" : null, "b" : 250, "result" : false }
{ "a" : null, "b" : null, "result" : true }

Bidang Tidak Ada

Jika salah satu bidang yang Anda coba bandingkan tidak ada, $gte mengembalikan true jika kolom kedua tidak ada, dan false jika yang pertama tidak ada.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 11, "a" : 250 }
{ "_id" : 12, "b" : 250 }

Ayo terapkan $gte ke dokumen-dokumen itu:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 11, 12 ] } } },
     {
       $project:
          {
            _id: 0,
            a: 1,
            b: 1,
            result: { $gte: [ "$a", "$b" ] }
          }
     }
   ]
)

Hasil:

{ "a" : 250, "result" : true }
{ "b" : 250, "result" : false }

Tak Terbatas

Membandingkan Infinity ke Infinity mengembalikan true .

Membandingkan -Infinity ke -Infinity mengembalikan true .

Membandingkan Infinity ke -Infinity mengembalikan true .

Membandingkan -Infinity ke Infinity mengembalikan false .

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 13, "a" : Infinity, "b" : Infinity }
{ "_id" : 14, "a" : -Infinity, "b" : -Infinity }
{ "_id" : 15, "a" : Infinity, "b" : -Infinity }
{ "_id" : 16, "a" : -Infinity, "b" : Infinity }

Ayo terapkan $gte ke dokumen-dokumen itu:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 13, 14, 15, 16 ] } } },
     {
       $project:
          {
            _id: 0,
            a: 1,
            b: 1,
            result: { $gte: [ "$a", "$b" ] }
          }
     }
   ]
)

Hasil:

{ "a" : Infinity, "b" : Infinity, "result" : true }
{ "a" : -Infinity, "b" : -Infinity, "result" : true }
{ "a" : Infinity, "b" : -Infinity, "result" : true }
{ "a" : -Infinity, "b" : Infinity, "result" : false }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Periksa jumlah koneksi saat ini ke MongoDb

  2. Mengapa error mongod mati tapi subsys terkunci dan tidak cukup ruang kosong untuk file jurnal di Linux?

  3. Bekerja dengan karakter khusus dalam koleksi Mongo

  4. Buat Indeks Wildcard di MongoDB

  5. Buat objek tanggal ISO dalam javascript