sql >> データベース >  >> NoSQL >> MongoDB

MongoDB $ strcasecmp

    MongoDBでは、$strcasecmp 集計パイプライン演算子は、大文字と小文字を区別しない2つの文字列の比較を実行します。

    1のいずれかを返します 、0 、または-1 、最初の文字列が2番目の文字列よりも大きいか、等しいか、または小さいかによって異なります。

    具体的には、$strcasecmp 戻り値:

    • 1 最初の文字列が2番目の文字列より大きい場合
    • 0 両方の文字列が等しい場合
    • -1 最初の文字列が2番目の文字列よりも小さい場合

    dataというコレクションがあるとします。 次のドキュメントを使用:

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

    $strcasecmpを適用すると次のようになります それらのドキュメントへ:

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

    結果:

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

    大文字と小文字の区別

    前述のように、$strcasecmp 大文字と小文字を区別しない比較を実行します。

    コレクションに次のドキュメントが含まれているとします。

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

    a フィールドには大文字の文字列とbが含まれます フィールドには同じ文字列が含まれていますが、小文字です。

    $strcasecmpを適用すると次のようになります 両方のフィールドに:

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

    結果:

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

    結果は0です 、これは両方の文字列が等しいことを意味します。

    つまり、比較では大文字と小文字が区別されませんでした。

    ヌル値

    $strcasecmp 2つのnull値を等しいものとして扱います。また、文字列はnullより大きいと見なされます 。

    コレクションに次のドキュメントがあるとします。

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

    $strcasecmpを適用すると次のようになります それらのドキュメントへ:

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

    結果:

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

    欠落しているフィールド

    欠落しているフィールドは、nullと同じ効果があります 。

    次のドキュメントをコレクションに追加しましょう:

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

    $strcasecmpを適用すると次のようになります 彼らに:

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

    結果:

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

    その他のデータ型

    文字列に解決できる限り、他のデータ型を比較できます。

    さまざまなデータ型を含む一連のドキュメントは次のとおりです。

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

    $strcasecmpを適用すると次のようになります それらのドキュメントへ:

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

    結果:

    { "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. 一部のOSでは、文字列をバッファとして再保存しますか?

    2. MongoDBの条件付き$sum

    3. Azure Redis Cache-複数のエラーTimeoutException:GET{key}の実行がタイムアウトしました

    4. MongoDBがインデックス交差を使用しないのはなぜですか?