MongoDB: How to select a Random Sample of Documents

MongoDB provides the $sample operator which can be used to select a random sample of documents from a collection. This operator takes a size parameter that indicates the number of documents you wish to select. The documents are chosen randomly from the collection using the pseudo-random number generator. This operator can be used in combination with other operations like sorting, limiting, and projection to further refine the selection.


You can use the following syntax to select a random sample of documents from a collection in MongoDB:

db.myCollection.aggregate([ { $sample: { size: 4 } } ])

This particular example selects a random sample of 4 documents in the collection titled myCollection.

To choose a random sample of a different size, simply change the value in the size argument.

The following example shows how to use this syntax in practice with a collection teams with the following seven documents:

db.teams.insertOne({team: "Mavs", points: 31})
db.teams.insertOne({team: "Spurs", points: 22})
db.teams.insertOne({team: "Rockets", points: 19})
db.teams.insertOne({team: "Warriors", points: 26})
db.teams.insertOne({team: "Cavs", points: 33})
db.teams.insertOne({team: "Hornets", points: 30})
db.teams.insertOne({team: "Nets", points: 14})

Example: Select Random Sample of Documents in MongoDB

The following code shows how to select a random sample of 4 documents from the teams collection:

db.teams.aggregate([ { $sample: { size: 4 } } ])

This query returns the following documents:

{ _id: ObjectId("6203ee711e95a9885e1e765d"),
  team: 'Cavs',
  points: 33 }
{ _id: ObjectId("6203ee711e95a9885e1e765b"),
  team: 'Rockets',
  points: 19 }
{ _id: ObjectId("6203ee711e95a9885e1e7659"),
  team: 'Mavs',
  points: 31 }
{ _id: ObjectId("6203ee711e95a9885e1e765f"),
  team: 'Nets',
  points: 14 } 

Notice that the following four teams are included in this random sample:

  • Cavs
  • Rockets
  • Mavs
  • Nets

If we use the $sample function again, it will select another random sample of documents which means there is no guarantee that the same set of documents will be chosen.

For example, suppose we select another random sample of 4 documents from the teams collection:

db.teams.aggregate([ { $sample: { size: 4 } } ])

This query returns the following documents:

{ _id: ObjectId("6203ee711e95a9885e1e765b"),
  team: 'Rockets',
  points: 19 }
{ _id: ObjectId("6203ee711e95a9885e1e765f"),
  team: 'Nets',
  points: 14 }
{ _id: ObjectId("6203ee711e95a9885e1e765e"),
  team: 'Hornets',
  points: 30 }
{ _id: ObjectId("6203ee711e95a9885e1e765c"),
  team: 'Warriors',
  points: 26 } 

The following four teams are included in this random sample:

  • Rockets
  • Nets
  • Hornets
  • Warriors

Notice that this random sample does not perfectly match the random sample from the previous example.

Note: You can find the complete documentation for the $sample function .

The following tutorials explain how to perform other common operations in MongoDB:

MongoDB: How to Query for “NOT NULL” in Specific Field

x