1

I'm using MongoDB 4.4.3 to query a random record from a collection :

db.MyCollection.aggregate([{ $sample: { size: 1 } }])

This query takes 20s (when a find query takes 0.2s)

Mongo doc states :

If all the following conditions are met, $sample uses a pseudo-random cursor to select documents:

  • $sample is the first stage of the pipeline
  • N is less than 5% of the total documents in the collection
  • The collection contains more than 100 documents

Here

  • $sample is the only stage of the pipeline
  • N = 1
  • MyCollection contains 46 millions documents

This problem is similar to MongoDB Aggregation with $sample very slow, which does not provide an answer for Mongo4.4.3

So why is this query so slow ?

Details

Query Planner

db.MyCollection.aggregate([{$sample: {size: 1}}]).explain()
{
    "stages" : [
        {
            "$cursor" : {
                "queryPlanner" : {
                    "plannerVersion" : 1,
                    "namespace" : "DATABASE.MyCollection",
                    "indexFilterSet" : false,
                    "winningPlan" : {
                        "stage" : "MULTI_ITERATOR"
                    },
                    "rejectedPlans" : [ ]
                }
            }
        },
        {
            "$sampleFromRandomCursor" : {
                "size" : 1
            }
        }
    ],
    "serverInfo" : {
        "host" : "mongodb4-3",
        "port" : 27017,
        "version" : "4.4.3",
        "gitVersion" : "913d6b62acfbb344dde1b116f4161360acd8fd13"
    },
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1611128334, 1),
        "signature" : {
            "hash" : BinData(0,"ZDxiOTnmG/zLKNtDIAWhxmjHHLM="),
            "keyId" : 6915708270745223171
        }
    },
    "operationTime" : Timestamp(1611128334, 1)
}

Execution stats

Execution stats

Noan Cloarec
  • 2,024
  • 2
  • 13
  • 25

0 Answers0