Explorer
MongoDB

Unwind the `tags` array from each post in the `posts` collection so each tag becomes its own document.

Problem Statement

<p>Unwind the <code>tags</code> array from each post in the <code>posts</code> collection so each tag becomes its own document.</p>

Examples

Input: posts collection: +-----+--------+-----------------------------------+ | _id | title | tags | +-----+--------+-----------------------------------+ | 1 | Post A | ["mongodb","nosql"] | | 2 | Post B | ["javascript","nodejs","mongodb"] | +-----+--------+-----------------------------------+

Output: +-----+--------+------------+ | _id | title | tags | +-----+--------+------------+ | 1 | Post A | mongodb | | 1 | Post A | nosql | | 2 | Post B | javascript | | 2 | Post B | nodejs | | 2 | Post B | mongodb | +-----+--------+------------+

Explanation: Documents containing the matching array elements are selected from the collection.

Complexity

Time Complexity: -

Space Complexity: -

Hints

šŸ’” Hint 1: Deconstruct an array field in documents to output a document for each element using the $unwind stage. šŸ’” Hint 2: Pass the array field path prefixed with "$" (e.g. { $unwind: "$items" }). šŸ’” Hint 3: Combine with $group or $project as needed and convert the cursor to an array using .toArray().

Editorial & Approach

Problem Overview & Intuition

To solve "Unwind an Array ($unwind)", we query the MongoDB document store. The goal is to unwind the `tags` array from each post in the `posts` collection so each tag becomes its own document. Using an aggregation pipeline, the database engine filters and structures the BSON documents efficiently.

Step-by-Step Approach

  1. Identify Target Collection: Access the collection through the db instance.
  2. Construct Query / Pipeline: Build the aggregation stages ($match, $group, $sort, etc.).
  3. Resolve Cursor: Invoke .toArray() to transform the query cursor into the required array of documents.

Optimal Implementation (MongoDB)

function solve(db) {
  return db.posts.aggregate([{ $unwind: "$tags" }]);
}

Complexity Analysis

Time Complexity O(N) pipeline traversal through aggregation stages.
Space Complexity O(M) intermediate document buffer in aggregation pipeline.

Key Considerations & Edge Cases

  • Empty Collections: If no documents match, the query cleanly returns an empty array [].
  • Missing / NULL Fields: Missing fields in documents are handled safely without throwing runtime exceptions.
  • Type Coercion: BSON types (ObjectId, Numbers, Strings) are compared strictly according to MongoDB specifications.

Unwind an Array ($unwind)

Medium

Unwind the tags array from each post in the posts collection so each tag becomes its own document.

Example Scenarios
1Example 1
Input:
posts collection
_idtitletags
1Post A["mongodb","nosql"]
2Post B["javascript","nodejs","mongodb"]
Output:
_idtitletags
1Post Amongodb
1Post Anosql
2Post Bjavascript
2Post Bnodejs
2Post Bmongodb
Explanation:

Documents containing the matching array elements are selected from the collection.

MongoDB Editor
Loading Editor...
Query Results (JSON)

Run your MongoDB code to see results here.