Examples - DocDB Direct Connection (SSH)¶
This page provides examples to interact with the Document Database (DocDB) using the provided Python client and SSH tunneling.
It is assumed that the required credentials are set in environment. Please refer to the User Guide for more details.
Note
It is recommended to use the REST API client instead of the SSH client for ease of use.
Querying Metadata¶
Count Example 1: Get # of records with a certain subject_id¶
import json
from aind_data_access_api.document_db_ssh import (
DocumentDbSSHClient,
DocumentDbSSHCredentials,
)
credentials = DocumentDbSSHCredentials()
with DocumentDbSSHClient(credentials=credentials) as doc_db_client:
filter = {"subject.subject_id": "731015"}
count = doc_db_client.collection.count_documents(filter)
print(count)
Filter Example 1: Get records with a certain subject_id¶
with DocumentDbSSHClient(credentials=credentials) as doc_db_client:
filter = {"subject.subject_id": "731015"}
records = list(
doc_db_client.collection.find(filter=filter)
)
print(json.dumps(records, indent=3))
With projection (recommended):
with DocumentDbSSHClient(credentials=credentials) as doc_db_client:
filter = {"subject.subject_id": "731015"}
projection = {
"name": 1,
"created": 1,
"location": 1,
"subject.subject_id": 1,
"subject.date_of_birth": 1,
}
records = list(
doc_db_client.collection.find(filter=filter, projection=projection)
)
print(json.dumps(records, indent=3))
Filter Example 2: Get records with a certain breeding group¶
with DocumentDbSSHClient(credentials=credentials) as doc_db_client:
filter = {
"subject.breeding_info.breeding_group": "Slc17a6-IRES-Cre;Ai230-hyg(ND)"
}
records = list(
doc_db_client.collection.find(filter=filter)
)
print(json.dumps(records, indent=3))
With projection (recommended):
with DocumentDbSSHClient(credentials=credentials) as doc_db_client:
filter = {
"subject.breeding_info.breeding_group": "Slc17a6-IRES-Cre;Ai230-hyg(ND)"
}
projection = {
"name": 1,
"created": 1,
"location": 1,
"subject.subject_id": 1,
"subject.breeding_info.breeding_group": 1,
}
records = list(
doc_db_client.collection.find(filter=filter, projection=projection)
)
print(json.dumps(records, indent=3))
Aggregation Example 1: Get all subjects per breeding group¶
with DocumentDbSSHClient(credentials=credentials) as doc_db_client:
agg_pipeline = [
{
"$group": {
"_id": "$subject.breeding_info.breeding_group",
"subject_ids": {"$addToSet": "$subject.subject_id"},
"count": {"$sum": 1},
}
}
]
result = list(
doc_db_client.collection.aggregate(pipeline=agg_pipeline)
)
print(f"Total breeding groups: {len(result)}")
print("First 3 breeding groups and corresponding subjects:")
print(json.dumps(result[:3], indent=3))
For more info about aggregations, please see MongoDB documentation: https://www.mongodb.com/docs/manual/aggregation/