diff --git a/modules/drivers/mongo/src/metabase/driver/mongo.clj b/modules/drivers/mongo/src/metabase/driver/mongo.clj
index c45da7de982eb9c3af3a357c83b91b86701b7248..49a250eda5bf8e257663786a9c7d212cb264f7a4 100644
--- a/modules/drivers/mongo/src/metabase/driver/mongo.clj
+++ b/modules/drivers/mongo/src/metabase/driver/mongo.clj
@@ -183,9 +183,14 @@
 (defmethod driver/dbms-version :mongo
   [_ database]
   (with-mongo-connection [^com.mongodb.DB conn database]
-    (let [build-info (mg/command conn {:buildInfo 1})]
+    (let [build-info (mg/command conn {:buildInfo 1})
+          version-array (get build-info "versionArray")
+          sanitized-version-array (into [] (take-while nat-int?) version-array)]
+      (when (not= (take 3 version-array) (take 3 sanitized-version-array))
+        (log/warnf "sanitizing versionArray %s results in %s, losing information"
+                   version-array sanitized-version-array))
       {:version (get build-info "version")
-       :semantic-version (get build-info "versionArray")})))
+       :semantic-version sanitized-version-array})))
 
 (defmethod driver/describe-database :mongo
   [_ database]
diff --git a/modules/drivers/mongo/test/metabase/driver/mongo_test.clj b/modules/drivers/mongo/test/metabase/driver/mongo_test.clj
index a1f78025f8976466dc436b2e34f8c9226e99d040..6f85ae0be2029932e08a08668fd16bd43bb41fee 100644
--- a/modules/drivers/mongo/test/metabase/driver/mongo_test.clj
+++ b/modules/drivers/mongo/test/metabase/driver/mongo_test.clj
@@ -21,6 +21,7 @@
             [metabase.test.data.mongo :as tdm]
             [metabase.util.log :as log]
             [monger.collection :as mcoll]
+            [monger.core :as mg]
             [taoensso.nippy :as nippy]
             [toucan2.core :as t2])
   (:import org.bson.types.ObjectId))
@@ -488,3 +489,19 @@
                (mt/rows
                 (mt/run-mbql-query bird_species
                   {:filter [:contains $bird_species._ "nett"]}))))))))
+
+(deftest strange-versionArray-test
+  (mt/test-driver :mongo
+    (testing "Negative values in versionArray are ignored (#29678)"
+      (with-redefs [mg/command (constantly {"version" "4.0.28-23"
+                                            "versionArray" [4 0 29 -100]})]
+        (is (= {:version "4.0.28-23"
+                :semantic-version [4 0 29]}
+               (driver/dbms-version :mongo (mt/db))))))
+
+    (testing "Any values after rubbish in versionArray are ignored"
+      (with-redefs [mg/command (constantly {"version" "4.0.28-23"
+                                            "versionArray" [4 0 "NaN" 29]})]
+        (is (= {:version "4.0.28-23"
+                :semantic-version [4 0]}
+               (driver/dbms-version :mongo (mt/db))))))))