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

MongoDB-特定のExplain出力を解釈します

    そこにある出力は、文字列の開始位置にバインドされていない正規表現に固有のものです。したがって、コレクションではなくインデックスをスキャンする正規表現の場合(この場合はインデックス全体をスキャンしますが)、開始境界と終了境界のセットが必要です。

    別の正規表現を使用した最初のクエリについて考えてみます。

    db.collection.find({ "username": /bob/ }).explain()
    
        "indexBounds" : {
                "username" : [
                        [
                                "",
                                {
    
                                }
                        ],
                        [
                                /bob/,
                                /bob/
                        ]
                ]
        },
    

    つまり、検索する文字列全体が存在することを意味し、文字列の一部として「bob」を含むもので一致が終了します。したがって、最初の部分は「字句」の一致境界であり、2番目の部分は適用される実際の正規表現です。

    次のクエリは、これをより明確に示しています。

    db.collection.find({ username: /^bob/ }).explain()
    
        "indexBounds" : {
                "username" : [
                        [
                                "bob",
                                "boc"
                        ],
                        [
                                /^bob/,
                                /^bob/
                        ]
                ]
        },
    

    これは文字列の先頭に固定されているため、テストする必要のあるインデックスのエントリのみが「bob」と「boc」の間で「字句的に」一致します。正規表現は、境界の2番目の部分として再び含まれています。

    境界エントリは通常、内部的に「2つの部分」の要素として記述されます。この場合、正規表現には、最初の部分でインデックスの一致に意味のある文字列境界があり、次に正規表現がそれらの一致に適用されます。全体。

    最後の注意として、以下を参照してください:

    db.collection.find({ username: {$gt: ""} }).explain()
    
        "indexBounds" : {
                "username" : [
                        [
                                "",
                                {
    
                                }
                        ]
                ]
        },
    

    これは本質的に最初のクエリと同じで、任意のに一致すると言います 文字列。




    1. MongodbAtlasをSpringに接続する方法

    2. ExpressとMongooseを使用して、既存のMongoDBドキュメントの配列にフォームデータを投稿する

    3. URLからd3.js配列を取得します

    4. 配列内のmongoid更新要素