Migrate Selected Content Using the Query Export Plugin
The Query Export plugin (cm:stacks:export-query) lets you export selected content types from a stack based on query criteria.
Use it when you need to export a subset of stack content instead of a full stack export.
Prerequisites
Before running the export, ensure the following:
- CLI v1.44+ installed and authenticated. Run csdx auth:login or use a management token alias.
- Query Export plugin installed (one-time)
csdx plugins:install @contentstack/cli-cm-export-query - Management token available (Delivery tokens are not supported.)
- Export directory defined: specify the -d path; optionally use --branch or --branch-alias (default: main).
Export Content Types Using CLI Commands
Use the following examples to export content types based on different query methods.
Export by Content Type Title
csdx cm:stacks:export-query -k <stack_api_key> -d ./export --query '{"modules":{"content-types":{"title":{"$in":["Blog","Author"]}}}}'Export by Content Type UID
csdx cm:stacks:export-query -k <stack_api_key> -d ./export --query '{"modules":{"content-types":{"uid":{"$in":["blog","author"]}}}}'Export Using a Query File
csdx cm:stacks:export-query -k <stack_api_key> -d ./export --query ./my-query.json
Example my-query.json:
{
"modules": {
"content-types": {
"$and": [
{ "uid": { "$in": ["blog_post", "author"] } }
]
}
}
}Export from a Specific Branch
csdx cm:stacks:export-query -k <stack_api_key> -d ./export --branch main --query '{"modules":{"content-types":{"title":{"$in":["Blog"]}}}}'Query Format
- The top-level key must be modules; under it use content-types (the only queryable module for this plugin).
- Use Delivery API–style operators (e.g. $in, $regex, $gte).
- The query filters content types only. Entries and assets are not directly filtered in the query JSON. All entries under matched content types are exported; only assets referenced by those exported entries are included.
Additional Resource: Refer to the Contentstack Content Delivery API documentation for the full list of supported operators.
Export Output Structure
The export generates the same folder structure as a standard stack export:
<data-dir>/<branch>/
For example: ./export/main/
Within this structure, the export creates the following primary directories:
- content_types/
- entries/
- assets/
- locales/
- environments/
In addition to this directory structure, Query Export automatically includes the following components:
- stack settings
- locales
- environments
- queried content types
- global fields
- extensions
- marketplace apps
- taxonomies
- entries for the matched content types
- referenced assets
Import the Exported Content into a Stack
Use the export folder (e.g., ./export/main) as -d in import or import-setup.
Import into an Empty Stack
csdx cm:stacks:import -k <target_stack_api_key> -d ./export/main
Import into a Stack with Existing Content
Step 1: Run import-setup
This generates a backup and prepares the mapper for entries and their dependencies (assets, extensions, marketplace-apps, taxonomies).
csdx cm:stacks:import-setup -k <target_stack_api_key> -d ./export/main --module entries
Note the backup path printed in the output (for example, ./_backup_456).
Step 2: Import with overwrite
csdx cm:stacks:import -k <target_stack_api_key> -d ./export/main --backup-dir ./_backup_456 --replace-existing --module entries
More articles in "Migration Use Cases"
