diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py
index ee61f6d4f97..6fa67eec870 100644
--- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py
+++ b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py
@@ -40,13 +40,15 @@
 ---
 """
 
-from pymongo import monitoring
+import json
 
+import bson.json_util
 from opentelemetry import trace
 from opentelemetry.auto_instrumentation.instrumentor import BaseInstrumentor
 from opentelemetry.ext.pymongo.version import __version__
 from opentelemetry.trace import SpanKind, get_tracer
 from opentelemetry.trace.status import Status, StatusCanonicalCode
+from pymongo import monitoring
 
 DATABASE_TYPE = "mongodb"
 COMMAND_ATTRIBUTES = ["filter", "sort", "skip", "limit", "pipeline"]
@@ -66,8 +68,8 @@ def started(self, event: monitoring.CommandStartedEvent):
         name = DATABASE_TYPE + "." + event.command_name
         statement = event.command_name
         if command:
-            name += "." + command
-            statement += " " + command
+            name += "." + str(command)
+            statement += " " + str(command)
 
         try:
             span = self._tracer.start_span(name, kind=SpanKind.CLIENT)
@@ -104,7 +106,12 @@ def succeeded(self, event: monitoring.CommandSucceededEvent):
         if span is None:
             return
         span.set_attribute("db.mongo.duration_micros", event.duration_micros)
-        span.set_status(Status(StatusCanonicalCode.OK, event.reply))
+        span.set_status(
+            Status(
+                StatusCanonicalCode.OK,
+                json.loads(bson.json_util.dumps(event.reply)),
+            )
+        )
         span.end()
 
     def failed(self, event: monitoring.CommandFailedEvent):
@@ -115,7 +122,12 @@ def failed(self, event: monitoring.CommandFailedEvent):
         if span is None:
             return
         span.set_attribute("db.mongo.duration_micros", event.duration_micros)
-        span.set_status(Status(StatusCanonicalCode.UNKNOWN, event.failure))
+        span.set_status(
+            Status(
+                StatusCanonicalCode.UNKNOWN,
+                json.loads(bson.json_util.dumps(event.failure)),
+            )
+        )
         span.end()
 
     def _pop_span(self, event):