MongoDB
DoubleDino Proxy supports native MongoDB query filters.
Unlike SQL databases, MongoDB does not use SQL queries. DoubleDino keeps the native MongoDB filter syntax and adds the collection name before the filter.
Format:
collection;filter
Example:
users;{"is_active": true}
The filter portion uses standard MongoDB query syntax.
Endpoint
Use:
/query
Basic query
Example:
Find active users:
- curl
- Node.js / Bun
- Python
curl -G "http://localhost:8080/query" \
--data-urlencode 'q=users;{"is_active": true}' \
-H "x-api-key: your-api-key"
const query = 'users;{"is_active": true}';
const response = await fetch(
"http://localhost:8080/query?q=" +
encodeURIComponent(query),
{
headers: {
"x-api-key": "your-api-key"
}
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.get(
"http://localhost:8080/query",
params={
"q": 'users;{"is_active": true}'
},
headers={
"x-api-key": "your-api-key"
}
)
print(response.json())
Example response:
{
"_id": "84sfg730",
"is_active": true,
"profile": {
"name": "Xk92Lm"
}
}
The document structure remains unchanged while sensitive values are transformed.
Using MongoDB filters
The filter uses normal MongoDB syntax.
Examples:
Match a field
users;{"is_active": true}
Match nested fields
users;{"profile.country": "AU"}
Multiple conditions
users;{
"is_active": true,
"role": "admin"
}
MongoDB operators
Standard MongoDB operators are supported.
Example:
{
"created_at": {
"$gt": "2026-01-01"
}
}
Debugging production issues
A common workflow is starting with a known identifier.
Example:
User ID: 65abc123
Query:
{
"_id": "65abc123"
}
Using DoubleDino:
users;{"_id":"65abc123"}
The query locates the real production document.
The returned document contains transformed values:
{
"_id": "84sfg730",
}
This allows developers to investigate production issues without exposing original data.
Nested documents
MongoDB documents can contain nested objects and arrays.
DoubleDino transforms nested values while preserving:
- Document structure.
- Arrays.
- Field relationships.
- Data types.
Example:
Before:
{
"customer": {
"name": "Alice",
"orders": [
{
"id": 123
}
]
}
}
After:
{
"customer": {
"name": "Eotrl",
"orders": [
{
"id": 123
}
]
}
}
Multiple collections
Each request targets one collection.
Example:
users;{"is_active": true}
For another collection:
orders;{"status":"pending"}
Make a separate request.
Preserving expressions
MongoDB follows the same expression preservation rules as other supported data sources.
If enabled by your administrator:
DD_ALLOW_DYNAMIC_EXPRESSIONS=true
you can send:
x-preserve-expressions
Example:
-H "x-preserve-expressions: tracking metadata"
Notes
- DoubleDino does not modify MongoDB data.
- Queries use native MongoDB filter syntax.
- Returned documents are always transformed.
- The original database remains unchanged.
Next steps
Continue with:
- Redis
- Logs