MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB - zinterpretuj konkretne wyjście wyjaśnij

Dane wyjściowe odnoszą się do wyrażenia regularnego, które nie jest powiązane z pozycją początkową ciągu. Tak więc dla wyrażenia regularnego, które będzie skanować indeks, a nie kolekcję (nawet jeśli w tym przypadku będzie skanować cały indeks), musi istnieć zestaw granic początkowych i końcowych:

Rozważ pierwsze zapytanie z innym wyrażeniem regularnym:

db.collection.find({ "username": /bob/ }).explain()

    "indexBounds" : {
            "username" : [
                    [
                            "",
                            {

                            }
                    ],
                    [
                            /bob/,
                            /bob/
                    ]
            ]
    },

Oznacza to, że do przeszukania jest cały ciąg, a następnie dopasowanie zakończy się na czymś, co zawiera „bob” jako część ciągu. Tak więc pierwsza część to „leksykalne” granice dopasowania, a druga część to rzeczywiste wyrażenie regularne do zastosowania:

Poniższe zapytanie pokazuje to wyraźniej:

db.collection.find({ username: /^bob/ }).explain()

    "indexBounds" : {
            "username" : [
                    [
                            "bob",
                            "boc"
                    ],
                    [
                            /^bob/,
                            /^bob/
                    ]
            ]
    },

Ponieważ jest on zakotwiczony na początku ciągu, jedyne pozycje indeksu, które należy przetestować, pasują „leksykalnie” między „bob” i „boc”. Wyrażenie regularne jest ponownie zawarte jako druga część granic.

Wpisy dotyczące granic są ogólnie opisywane jako elementy „dwuczęściowe” wewnętrznie, i jest to przypadek dla wyrażeń regularnych, które w pierwszej części mają granice łańcuchowe, które mają sens dla dopasowania indeksu, a następnie dla wyrażenia regularnego stosowanego do tych pasujących całości.

Jako ostatnią uwagę zobacz:

db.collection.find({ username: {$gt: ""} }).explain()

    "indexBounds" : {
            "username" : [
                    [
                            "",
                            {

                            }
                    ]
            ]
    },

Co jest w istocie takie samo jak początkowe zapytanie, które mówi, że pasuje do dowolnego ciąg.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Błąd zapytania zagnieżdżonego wyboru Mongodb

  2. Dlaczego MongoDB nie używa przecięcia indeksu?

  3. Harmonogram zdarzeń (cronjob) w MongoDB?

  4. Optymalizacja zadania przepływu powietrza, które przesyła dane z BigQuery do MongoDB

  5. ArrayFilter w manguście