diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts
index 1f7c67fa26..bf3e4982ea 100644
--- a/packages/core/src/utils.ts
+++ b/packages/core/src/utils.ts
@@ -511,7 +511,7 @@ export function cutObjectArray (obj: any): any {
       } else Object.assign(r, { [key]: obj[key] })
       continue
     }
-    if (typeof obj[key] === 'object') {
+    if (typeof obj[key] === 'object' && obj[key] !== null) {
       Object.assign(r, { [key]: cutObjectArray(obj[key]) })
       continue
     }
diff --git a/server/tool/src/index.ts b/server/tool/src/index.ts
index deef43a26e..bfd2727734 100644
--- a/server/tool/src/index.ts
+++ b/server/tool/src/index.ts
@@ -279,7 +279,12 @@ async function createUpdateIndexes (connection: CoreClient, db: Db, logger: Mode
     const bb: (string | FieldIndex<Doc>)[] = []
     for (const vv of v.values()) {
       try {
-        await collection.createIndex(vv)
+        const key = typeof vv === 'string' ? vv : Object.keys(vv)[0]
+        const name = typeof vv === 'string' ? `${key}_1` : `${key}_${vv[key]}`
+        const exists = await collection.indexExists(name)
+        if (!exists) {
+          await collection.createIndex(vv)
+        }
       } catch (err: any) {
         logger.log('error', JSON.stringify(err))
       }