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

MongoDB $strcasecmp

Di MongoDB, $strcasecmp operator pipa agregasi melakukan perbandingan case-insensitive dari dua string.

Ini mengembalikan 1 , 0 , atau -1 , tergantung pada apakah string pertama lebih besar dari, sama dengan, atau kurang dari string kedua.

Khususnya, $strcasecmp kembali:

  • 1 jika string pertama lebih besar dari string kedua
  • 0 jika kedua string sama
  • -1 jika string pertama lebih kecil dari string kedua

Contoh

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

{ "_id" : 1, "a" : "abc", "b" : "def" }
{ "_id" : 2, "a" : "abc", "b" : "abc" }
{ "_id" : 3, "a" : "def", "b" : "abc" }
{ "_id" : 4, "a" : "abc", "b" : "cba" }
{ "_id" : 5, "a" : "cba", "b" : "abc" }

Inilah yang terjadi ketika kita menerapkan $strcasecmp ke dokumen-dokumen itu:

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

Hasil:

{ "a" : "abc", "b" : "def", "result" : -1 }
{ "a" : "abc", "b" : "abc", "result" : 0 }
{ "a" : "def", "b" : "abc", "result" : 1 }
{ "a" : "abc", "b" : "cba", "result" : -1 }
{ "a" : "cba", "b" : "abc", "result" : 1 }

Sensitivitas Huruf Besar

Seperti disebutkan, $strcasecmp melakukan perbandingan peka huruf besar/kecil.

Misalkan koleksi kita berisi dokumen berikut:

{ "_id" : 6, "a" : "ABC", "b" : "abc" }

a bidang berisi string huruf besar, dan b field berisi string yang sama, tetapi dalam huruf kecil.

Inilah yang terjadi ketika kita menerapkan $strcasecmp ke kedua bidang:

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

Hasil:

{ "a" : "ABC", "b" : "abc", "result" : 0 }

Hasilnya adalah 0 , yang berarti bahwa kedua string adalah sama.

Dengan kata lain, perbandingannya tidak peka huruf besar/kecil.

Nilai Null

$strcasecmp memperlakukan dua nilai nol sebagai sama. Juga, string dianggap lebih besar dari null .

Misalkan kita memiliki dokumen berikut dalam koleksi kita:

{ "_id" : 7, "a" : "abc", "b" : null }
{ "_id" : 8, "a" : null, "b" : "abc" }
{ "_id" : 9, "a" : null, "b" : null }

Inilah yang terjadi ketika kita menerapkan $strcasecmp ke dokumen-dokumen itu:

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

Hasil:

{ "a" : "abc", "b" : null, "result" : 1 }
{ "a" : null, "b" : "abc", "result" : -1 }
{ "a" : null, "b" : null, "result" : 0 }

Bidang Tidak Ada

Bidang yang hilang memiliki efek yang sama dengan null .

Mari tambahkan dokumen berikut ke koleksi kami:

{ "_id" : 10, "a" : "abc" }
{ "_id" : 11, "b" : "abc" }
{ "_id" : 12 }

Inilah yang terjadi ketika kita menerapkan $strcasecmp kepada mereka:

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

Hasil:

{ "a" : "abc", "result" : 1 }
{ "b" : "abc", "result" : -1 }
{ "result" : 0 }

Jenis Data Lainnya

Tipe data lain dapat dibandingkan, selama mereka dapat diselesaikan menjadi string.

Berikut adalah sekumpulan dokumen yang berisi berbagai tipe data:

{ "_id" : 13, "a" : 123, "b" : 456 }
{ "_id" : 14, "a" : 123, "b" : 123 }
{ "_id" : 15, "a" : 456, "b" : 123 }
{ "_id" : 16, "a" : NumberDecimal("123"), "b" : NumberDecimal("456") }
{ "_id" : 17, "a" : NumberDecimal("123"), "b" : NumberDecimal("123") }
{ "_id" : 18, "a" : NumberDecimal("456"), "b" : NumberDecimal("123") }
{ "_id" : 19, "a" : ISODate("1999-01-03T23:30:15.100Z"), "b" : "2000-01-03T23:30:15.100Z" }
{ "_id" : 20, "a" : ISODate("2000-01-03T23:30:15.100Z"), "b" : "2000-01-03T23:30:15.100Z" }
{ "_id" : 21, "a" : ISODate("2000-01-03T23:30:15.100Z"), "b" : "1999-01-03T23:30:15.100Z" }

Dan inilah yang terjadi ketika kita menerapkan $strcasecmp ke dokumen-dokumen itu:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 13, 14, 15, 16, 17, 18, 19, 20, 21 ] } } },
     {
       $project:
          {
            _id: 0,
            a: 1,
            b: 1,
            result: { $strcasecmp: [ "$a", "$b" ] }
          }
     }
   ]
).pretty()

Hasil:

{ "a" : 123, "b" : 456, "result" : -1 }
{ "a" : 123, "b" : 123, "result" : 0 }
{ "a" : 456, "b" : 123, "result" : 1 }
{ "a" : NumberDecimal("123"), "b" : NumberDecimal("456"), "result" : -1 }
{ "a" : NumberDecimal("123"), "b" : NumberDecimal("123"), "result" : 0 }
{ "a" : NumberDecimal("456"), "b" : NumberDecimal("123"), "result" : 1 }
{
	"a" : ISODate("1999-01-03T23:30:15.100Z"),
	"b" : "2000-01-03T23:30:15.100Z",
	"result" : -1
}
{
	"a" : ISODate("2000-01-03T23:30:15.100Z"),
	"b" : "2000-01-03T23:30:15.100Z",
	"result" : 0
}
{
	"a" : ISODate("2000-01-03T23:30:15.100Z"),
	"b" : "1999-01-03T23:30:15.100Z",
	"result" : 1
}

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menanyakan objek yang disematkan di Mongoid/rails 3 (Lebih rendah dari, operator Min, dan pengurutan)

  2. urutkan berdasarkan panjang string di Mongodb/pymongo

  3. Bagaimana cara memasukkan banyak dokumen sekaligus di MongoDB melalui Java

  4. Perbarui objek array bersarang berdasarkan properti di MongoDB

  5. SQL COALESCE() Dijelaskan