Course contentsShow
← Databases & SQL
Lesson 1215 of 1,95311. NoSQL and Document ModelsFree lesson

Querying for Absence of Data

Filter documents based on missing or null field values.

In this lesson, you will learn how to identify and filter documents that are missing specific fields or contain explicit null values within your document-oriented database.

The Challenge of Missing Data

In flexible schema models, documents within the same collection don't always contain the same set of fields. A "missing" field is structurally different from a field set to null. To effectively query your data, you must distinguish between these two states to ensure your application logic handles incomplete records gracefully.

Querying for Missing Fields

If you want to find all documents where a specific field—such as shipping_date—does not exist at all, you use the $exists operator set to false. This is useful for identifying incomplete records that haven't reached a certain state in a workflow:

// Find documents where the "shipping_date" field is completely missing
db.orders.find({ shipping_date: { $exists: false } })

Querying for Null Values

A field might exist but contain a null value. The $exists operator will return true for these, so you need a different approach. If you query specifically for null, the database looks for fields that are explicitly set to that value:

// Find documents where "shipping_date" exists but is set to null
db.orders.find({ shipping_date: null })

Combining the Logic

Often, you want to retrieve both missing fields and explicitly null fields simultaneously—for example, to find all orders that have not yet been assigned a shipping date. You can combine these conditions using the $or operator:

db.orders.find({
  $or: [
    { shipping_date: { $exists: false } },
    { shipping_date: null }
  ]
})

By mastering these operators, you gain the ability to perform "data hygiene" tasks, identifying which documents require updates or further processing because they lack the necessary information to move forward in your business logic.

Key Takeaway: Use the $exists: false operator to find fields that were never created, and target null directly to find fields that were explicitly emptied, allowing you to manage sparse data structures effectively.