notes icon indicating copy to clipboard operation
notes copied to clipboard

MongoDB数据导出及导入 or MongoDB export and import

Open lanlin opened this issue 3 years ago • 2 comments

1. shell 清空所有 collection 数据但保留 collection 及索引

#!/bin/bash

DB_NAME="your_db_name"
DB_HOST="your_db_host"
DB_USER="your_db_username"
DB_PASS="your_db_password"

MONGODB_URI="mongodb+srv://$DB_USER:$DB_PASS@$DB_HOST/$DB_NAME"
COLLECTIONS=$(mongosh $MONGODB_URI --quiet --eval "show collections")

mongosh $MONGODB_URI --eval "use stamsel; db.getCollectionNames().forEach((col) => {
   db[col].deleteMany({});
});"

保存以上代码到 cleanup.sh 中,并使用指令 chmod +x cleanup.sh 为文件添加可执行权限。 执行 ./cleanup.sh 即可,cleanup.sh 是 sh 的文件名,可以自己随意起一个。

PS: 此处用的 mongosh, 也可以用 mongo 替代, 二者都是 MongoDB 官方出品。mongoshmongo 支持的功能更多

lanlin avatar Aug 17 '22 02:08 lanlin

2. shell 导出所有 collection 数据到指定目录

#!/bin/bash

DB_NAME="your_db_name"
DB_HOST="your_db_host"
DB_USER="your_db_username"
DB_PASS="your_db_password"

TARGET=$1
MONGODB_URI="mongodb+srv://$DB_USER:$DB_PASS@$DB_HOST/$DB_NAME"
COLLECTIONS=$(mongosh $MONGODB_URI --quiet --eval "show collections")

for col in $COLLECTIONS; do
    echo "Exporting $col ..."
    mongoexport --uri=$MONGODB_URI --collection="$col" --out="$TARGET/$col.json"
done

保存以上代码到 export.sh 中,并使用指令 chmod +x export.sh 为文件添加可执行权限。 执行 ./export.sh /your/target/path/here 即可,export.sh 是 sh 的文件名,可以自己随意起一个。

lanlin avatar Aug 17 '22 02:08 lanlin

3. shell 从指定目录导入数据

#!/bin/bash

DB_NAME="your_db_name"
DB_HOST="your_db_host"
DB_USER="your_db_username"
DB_PASS="your_db_password"

TARGET=$1
MONGODB_URI="mongodb+srv://$DB_USER:$DB_PASS@$DB_HOST/$DB_NAME"

for f in `ls $TARGET`; do
    if [[ "$f" == *.json ]]; then
        echo "Importing ${f%.*} ..."
        mongoimport --uri=$MONGODB_URI --collection="${f%.*}" --file="$TARGET/$f"
    fi
done

保存以上代码到 import.sh 中,并使用指令 chmod +x import.sh 为文件添加可执行权限。 执行 ./import.sh /your/target/path/here 即可,import.sh 是 sh 的文件名,可以自己随意起一个。

lanlin avatar Aug 17 '22 02:08 lanlin