Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-4491

count() on a find() returns scanned count instead of result count

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Duplicate
    • Affects Version/s: 2.0.1
    • Fix Version/s: None
    • Component/s: Querying
    • Labels:
    • Environment:
      Ubuntu 11.04, Linux bs-linux64.10gen.cc 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41
    • Operating System:
      Linux

      Description

      On a largeish collection, results from count() applied to a query appear to return the number of scanned objects instead of the number of objects returned by the find():

      db.activity.findOne(

      {'datacache.user.id': null}

      )
      null

      > db.activity.find(

      {'datacache.user.id': null}

      )
      (No result)

      > db.activity.find(

      {'datacache.user.id': null}

      ).count()
      816

      > db.activity.count(

      {'datacache.user.id': null}

      )
      816

      > db.activity.find(

      {'datacache.user.id': null}

      ).explain()
      {
      "cursor" : "BtreeCursor datacache_user_id_1",
      "nscanned" : 816,
      "nscannedObjects" : 816,
      "n" : 0,
      "millis" : 44,
      "nYields" : 0,
      "nChunkSkips" : 0,
      "isMultiKey" : true,
      "indexOnly" : false,
      "indexBounds" :

      { "datacache.user.id" : [ [ null, null ] ] }

      }

      Searching for values besides null in that collection is inconclusive: result count always matches scanned count in such cases, they only differ for null.

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: