2014-07-10 3 views
0

J'ai la question quelle méthode de comptage est plus rapide: J'ai quelques paramètres de filtre appelés filterParameters. Maintenant, je faire:Mongo compte sur la collection ou compte sur le curseur - qui plus vite

1. First option: 
    int count = count with db.dbCollection.count(filterParameters) 
    and then 
    dbCursor = db.dbCollection.find(filterParameters).skip(..).limit(..) 

2. Second way: 
    dbCursor = db.dbCollection.find(filterParameters).skip(..).limit(..) 
    int count = dbCursor.count() 

Et en Java, la première façon:

Integer countAllItems = documentService.count(documentType,filterQuery) 
DBCursor documents = documentService.list(documentType, [:], filterQuery, sortQuery, command.start, command.count) 

où: documentService.count(documentType,filterQuery) faire:

def collection = db.getCollection(documentType.collectionName) 
collection.count(filterQuery) 

et documentService.list est de trouver que sur la collecte.

Et puis la deuxième voie:

DBCursor documents = documentService.list(documentType, [:], filterQuery, sortQuery, command.start, command.count) 
Integer countAllItems = documents.count() 

Lequel est méthode plus rapide?

Répondre

2

Ni le compte particulier que vous utilisez est un lien symbolique pour le nombre de curseur, ils sont la même fonction.

+0

Ensuite, la seconde devrait être plus rapide? Si vous dites qu'en réalité la requête 'count' est équivalente à' find' + compte du curseur (c'est-à-dire la "seconde façon"), alors la "première option" est équivalente à la deuxième + une autre requête de recherche. Ou est-ce que je me trompe quelque part? En plus de cela, mongo ne capitalise-t-il pas sur ses requêtes exécutées? – dgiugg

+0

Donc, je reçois vraiment différents fealings, parce que quand j'ai utilisé la première option du pilote java, j'obtiens le temps de la salle plus court que la deuxième option. – lukisp

+0

@dgiugg non, vous ne faites qu'une requête dans les deux méthodes – Sammaye