2016-09-15 55 views
5
db.query(aql ` 
    FOR doc IN ${collection} 
    FILTER REGEX_TEST(CONCAT(VALUES(doc, true)), ${queryStr}, true) 
     SORT doc[${sortBy}] ${dir} 
     LIMIT ${start, count} 
      RETURN doc._key 
     `) 
     .then(cursor => { 
      cb(cursor._result) 
     }, err => console.log(err)) 

mam powyżej AQL zapytanie, Chcę policzyć całkowity nuber filtrowanych wyników przed ograniczanie wyników na stronie (paginacja Purpose)ArangoDb - Jak policzyć liczbę przefiltrowanych wyników przed ograniczając je

I zdaniem problem jest podobny do tego MySQL - How to count rows before pagination?, Find total number of results in mySQL query with offset+limit

chcesz robić w ArangoDb z AQL

i część rozwiązania może być to How to count number of elements with AQL?

Więc, jakie jest skuteczne/najlepsze rozwiązanie dla moich wymagań z AQL?

+0

Czy odpowiedź spełniała Twoje wymagania? Jeśli nie, to czego brakuje? Jeśli, możesz oznaczyć to przyjęcie? – dothebart

+0

Jeszcze jedna pomoc proszę .. :) Czy mógłbyś podać mi minimalny przykład, jak to osiągnąć, używając ArangoJS – shivaraj

Odpowiedz

8

Możesz ustawić flagę fullCount w opcji dla utworzenia kursora na true. Następnie wynik będzie miał dodatkowy atrybut z atrybutami podrzędnymi stats i fullCount.

Następnie można uzyskać atrybut fullCount poprzez cursor.extra.stats.fullCount. Ten atrybut zawiera liczbę dokumentów w wynikach przed zastosowaniem ostatniego zapytania LIMIT w zapytaniu. see HTTP documentation

Ponadto należy użyć explain feature do analizy zapytania. W twoim przypadku twoje zapytanie zawsze będzie miało pełne skanowanie kolekcji, a więc nie będzie się dobrze skalować.

aktualizacja

I dodaje flagę fullCount do kodu. Należy pamiętać, że atrybut fullCount pojawia się tylko wtedy, gdy liczba wyników przed LIMIT jest wyższa niż wyników po.

db.query(aql ` 
    FOR doc IN ${collection} 
    FILTER REGEX_TEST(CONCAT(VALUES(doc, true)), ${queryStr}, true) 
     SORT doc[${sortBy}] ${dir} 
     LIMIT ${start, count} 
      RETURN {family: doc.family, group: doc.group} `, {count:true, options:{fullCount:true} }) 
.then(cursor => { console.log(cursor) }, err => console.log(err)) 
+0

Jeszcze jedna pomoc proszę .. :) Czy mógłbyś podać mi minimalny przykład, jak osiągnąć powyższe przy użyciu ArangoJS – shivaraj

+0

Jak ustawić flagi w tym pliku .. db.query (aql ' FOR doc IN $ {kolekcja} FILTR REGEX_TEST (CONCAT (VALUES (doc, true)), $ {queryStr}, true) SORTOCENT [$ {sortBy}] $ {dir} LIMIT $ {start, count} POWRÓT {family: doc.family, grupa: doc.group} ', {count: true}) ., następnie konsola (cursor => { . log (kursor) }, err => console.log (err)) – shivaraj

+0

Jak ustawić flagę count dla powyższego? – shivaraj