mongodb 导出 带条件_如何导出MongoDB中的所有集合?

我想通过命令导出MongoDB中的所有集合:

mongoexport -d dbname -o Mongo.json

结果是:

没有指定集合!

手册说,如果您没有指定集合,则将导出所有集合。

但是,为什么这不起作用?

http://docs.mongodb.org/manual/reference/mongoexport/#cmdoption-mongoexport--collection

我的MongoDB版本是2.0.6。

您使用的是哪个版本的MongoDB? mongoexport的wiki文档表明这是一个用于导出集合的命令行工具。也许导出多个集合的能力是针对较新的版本?如果要备份数据库中的所有集合,mongodump会将所有集合导出到BSON。

看起来对所有集合使用mongoexport的选项是尚未安排的计划特征:SERVER-201 ..所以mongodump目前是导出完整数据库的最佳选择。使用其中一个MongoDB客户端驱动程序编写等效的mongoexport并不困难。

您应该将答案标记为已接受。我的投票是stackoverflow.com/a/16605781/1686575

为了记录,MongoDB文档说明避免使用mongoimport和mongoexport进行完整的实例生产备份。它们不能可靠地保留所有丰富的BSON数据类型,因为JSON只能表示BSON支持的类型的子集。使用MongoDB备份方法中描述的mongodump和mongorestore来实现此类功能。所以它不仅仅是像Mentor Reka所说的懒人,而且也是这样做的首选方法。

对于懒人,使用mongodump,它更快:

mongodump -d -o

并"恢复/导入"它(来自directory_backup / dump /):

mongorestore -d

这样,您无需单独处理所有集合。只需指定数据库即可。

请注意,我建议不要将mongodump / mongorestore用于大数据存储。它非常慢,一旦你超过10 / 20GB的数据,它可能需要数小时才能恢复。

JSON和BSON之间是否存在兼容性问题?

mongodump从2.2或更高版本使用的数据格式与早期版本的mongod不兼容。请勿使用最新版本的mongodump来备份旧数据存储。

Thx @ n0nSmoker获取此信息!

我相信restore命令是"mongorestore -b DATABASE ./dump-folder"(其中./dump-folder是路径或导出的数据)。

"mongorestore -d DATABASE ./dump-folder"

很好,但我怎么能排除一个集合(会话)?

我只是在尝试运行mongodump时不断获取SyntaxError: Unexpected identifier。有任何想法吗?

@LucaSteeb使用--excludeCollection = sessions

我试过这个并得到错误:不知道如何处理文件"0 / objects.bson",跳过...

我试过mongodump但是我在system.profile集合上遇到了安全性错误:(

但是如果您使用mongoDB 3.2导入并导入3.4并且您有关于索引的错误,请使用--noIndexRestore导入

@LusSoares IDK如果尝试使用sudo会有帮助吗?由于没有管理员权限,AKA是安全消息吗?如果是这样,请尝试输入sudo mongodump * rest of code *。

如何从远程机器导出转储?

@SangramBadi这应该工作:--host , -h。您可以在docs.mongodb.com/manual/reference/program/mongodump上找到更多信息

@JulienFr这也可以导出为JSON而不是BSON:techoverflow.net/2018/06/04/然而,如本文档中所述:"......可以存储在MongoDB中的某些数据类型只能用BSON表示 - 所以在某些情况下,导出到JSON可能会丢失信息。"

我为此编写了bash脚本。只需运行2个参数(数据库名称,dir来存储文件)。

#!/bin/bash

if [ ! $1 ]; then

echo" Example of use: $0 database_name [dir_to_store]"

exit 1

fi

db=$1

out_dir=$2

if [ ! $out_dir ]; then

out_dir="./"

else

mkdir -p $out_dir

fi

tmp_file="fadlfhsdofheinwvw.js"

echo"print('_ ' + db.getCollectionNames())"> $tmp_file

cols=`mongo $db $tmp_file | grep '_' | awk '{print $2}' | tr ',' ' '`

for c in $cols

do

mongoexport -d $db -c $c -o"$out_dir/exp_${db}_${c}.json"

done

rm $tmp_file

要导入:for file in *.json; do c=${file#*exp_yourdbname_}; c=${c%.json}; mongoimport --db yourdbname --collection"${c}" --file"${file}"; done

我想用批处理脚本导入.csv,你有什么想法吗?

按照以下步骤从服务器创建mongodump并将其导入另一台具有用户名和密码的服务器/本地计算机

1. mongodump -d dbname -o dumpname -u username -p password

2. scp -r user@remote:~/location/of/dumpname ./

3. mongorestore -d dbname dumpname/dbname/ -u username -p password

使用mongodump导出所有集合使用以下命令

mongodump -d database_name -o directory_to_store_dumps

要还原,请使用此命令

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored

请告诉我们您安装Mongo DB的位置? (在Ubuntu或Windows中)

对于Windows:

在导出之前,您必须在cmd提示符下连接到Mongo DB,并确保您能够连接到本地主机。

现在打开一个新的cmd提示符并执行以下命令,

mongodump --db数据库名称 - 要保存的路径

例如:mongodump --db mydb --out c: TEMP op.json

有关详细信息,请访问https://www.youtube.com/watch?v=hOCp3Jv6yKo。

对于Ubuntu:

登录到安装了Mongo DB的终端,并确保能够连接到Mongo DB。

现在打开一个新终端并执行以下命令,

mongodump -d数据库名称-o要保存的文件名

例如:mongodump -d mydb -o output.json

有关详细信息,请访问https://www.youtube.com/watch?v=5Fwd2ZB86gg。

如果您对bson格式没问题,则可以使用具有相同-d标志的mongodump实用程序。它会将所有集合转储到转储目录(默认情况下,可以通过-o选项更改)以bson格式转储。然后,您可以使用mongorestore实用程序导入这些文件。

您可以使用mongo --eval 'printjson(db.getCollectionNames())'来获取集合列表

然后对所有这些做一个mongoexport。

这是ruby中的一个例子

out = `mongo  #{DB_HOST}/#{DB_NAME} --eval"printjson(db.getCollectionNames())"`

collections = out.scan(/".+"/).map { |s| s.gsub('"', '') }

collections.each do |collection|

system"mongoexport --db #{DB_NAME}  --collection #{collection}  --host '#{DB_HOST}' --out #{collection}_dump"

end

这很好,但你可能希望out.scan正则表达式不贪婪。 out.scan(".+?").map { |s| s.gsub(", ) }

我需要Windows批处理脚本版本。这个帖子很有用,所以我想我也会给出答案。

mongo"{YOUR SERVER}/{YOUR DATABASE}" --eval"rs.slaveOk();db.getCollectionNames()" --quiet>__collections.txt

for /f %%a in ('type __collections.txt') do @set COLLECTIONS=%%a

for %%a in (%COLLECTIONS%) do mongoexport --host {YOUR SERVER} --db {YOUR DATABASE} --collection %%a --out data\%%a.json

del __collections.txt

我使用set /p COLLECTIONS=时遇到了一些问题,因此使用了复杂的for /f方法。

以前的答案解释得很清楚,如果您正在处理远程密码保护的数据库,我正在添加我的答案

mongodump --host xx.xxx.xx.xx --port 27017 --db your_db_name --username your_user_name --password your_password --out /target/folder/path

如果要连接mongolab.com等远程mongoDB服务器,则应传递连接凭据

例如。

mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json

这个解决方案是最好的,因为它正确回答了原始问题。

请注意,这并不能可靠地保留所有丰富的BSON数据类型,因为JSON只能表示BSON支持的类型的子集。使用MongoDB备份方法中描述的mongodump和mongorestore来实现此类功能。 (文档)

如果需要,可以将所有集合导出到csv而不指定--fields(将导出所有字段)。

来自http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/运行此bash脚本

OIFS=$IFS;

IFS=",";

# fill in your details here

dbname=DBNAME

user=USERNAME

pass=PASSWORD

host=HOSTNAME:PORT

# first get all collections in the database

collections=`mongo"$host/$dbname" -u $user -p $pass --eval"rs.slaveOk();db.getCollectionNames();"`;

collections=`mongo $dbname --eval"rs.slaveOk();db.getCollectionNames();"`;

collectionArray=($collections);

# for each collection

for ((i=0; i

do

echo 'exporting collection' ${collectionArray[$i]}

# get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys

keys=`mongo"$host/$dbname" -u $user -p $pass --eval"rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;

# now use mongoexport with the set of keys to export the collection to csv

mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields"$keys" --csv --out $dbname.${collectionArray[$i]}.csv;

done

IFS=$OIFS;

我在尝试了许多复杂的例子后发现,非常简单的方法对我有用。

我只想从本地转储数据库并将其导入远程实例:

在本地机器上:

mongodump -d databasename

然后我把我的转储scp到我的服务器机器:

scp -r dump user@xx.xxx.xxx.xxx:~

然后从转储的父目录简单地说:

mongorestore

并导入数据库。

假设mongodb服务正在运行。

如果要将所有集合转储到所有数据库中(这是对原始提问者意图的扩展解释),请使用

mongodump

所有数据库和集合都将在"当前"位置的名为"dump"的目录中创建

您可以使用以下命令创建zip文件。它将创建提供的数据库{dbname}的zip文件。您可以稍后在您的mongo DB中导入以下zip文件。

Window filepath=C:\Users\Username\mongo

mongodump --archive={filepath}\+{filename}.gz --gzip --db {dbname}

为了更加清晰,请使用以下信息docs.mongodb.com/manual/reference/program/mongodump

这是恢复导出数据库时对我有用的:

mongorestore -d 0 ./0 --drop

其中./contained导出的bson文件。请注意,--drop将覆盖现有数据。

我意识到这是一个相当古老的问题,如果你想要100%忠实的结果,包括索引,mongodump / mongorestore显然是正确的方法。

但是,我需要一个快速而肮脏的解决方案,可能会在新旧版本的MongoDB之间进行向前和向后兼容,前提是没有什么特别古怪的事情发生。为此我想要原始问题的答案。

上面还有其他可接受的解决方案,但是这个Unix管道相对简短而且很甜:

mongo --quiet mydatabase --eval"db.getCollectionNames().join('

')" | \

grep -v system.indexes | \

xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json

这会为每个集合生成一个适当命名的.json文件。

请注意,数据库名称("mydatabase")出现两次。我假设数据库是本地的,您不需要传递凭据,但是使用mongo和mongoexport这样做很容易。

请注意,我正在使用grep -v来丢弃system.indexes,因为我不希望较旧版本的MongoDB尝试从较新版本的系统集合中解释系统集合。相反,我允许我的应用程序进行通常的ensureIndex调用来重新创建索引。

如果你想使用mongoexport和mongoimport从数据库导出/导入每个集合,我认为这个实用程序可以对你有所帮助。

我几次使用类似的实用程序;

LOADING=false

usage()

{

cat << EOF

usage: $0 [options] dbname

OPTIONS:

-h      Show this help.

-l      Load instead of export

-u      Mongo username

-p      Mongo password

-H      Mongo host string (ex. localhost:27017)

EOF

}

while getopts"hlu:p:H:" opt; do

MAXOPTIND=$OPTIND

case $opt in

h)

usage

exit

;;

l)

LOADING=true

;;

u)

USERNAME="$OPTARG"

;;

p)

PASSWORD="$OPTARG"

;;

H)

HOST="$OPTARG"

;;

\?)

echo"Invalid option $opt"

exit 1

;;

esac

done

shift $(($MAXOPTIND-1))

if [ -z"$1" ]; then

echo"Usage: export-mongo [opts] "

exit 1

fi

DB="$1"

if [ -z"$HOST" ]; then

CONN="localhost:27017/$DB"

else

CONN="$HOST/$DB"

fi

ARGS=""

if [ -n"$USERNAME" ]; then

ARGS="-u $USERNAME"

fi

if [ -n"$PASSWORD" ]; then

ARGS="$ARGS -p $PASSWORD"

fi

echo"*************************** Mongo Export ************************"

echo"**** Host:      $HOST"

echo"**** Database:  $DB"

echo"**** Username:  $USERNAME"

echo"**** Password:  $PASSWORD"

echo"**** Loading:   $LOADING"

echo"*****************************************************************"

if $LOADING ; then

echo"Loading into $CONN"

tar -xzf $DB.tar.gz

pushd $DB >/dev/null

for path in *.json; do

collection=${path%.json}

echo"Loading into $DB/$collection from $path"

mongoimport $ARGS -d $DB -c $collection $path

done

popd >/dev/null

rm -rf $DB

else

DATABASE_COLLECTIONS=$(mongo $CONN $ARGS --quiet --eval 'db.getCollectionNames()' | sed 's/,/ /g')

mkdir /tmp/$DB

pushd /tmp/$DB 2>/dev/null

for collection in $DATABASE_COLLECTIONS; do

mongoexport --host $HOST -u $USERNAME -p $PASSWORD -db $DB -c $collection --jsonArray -o $collection.json >/dev/null

done

pushd /tmp 2>/dev/null

tar -czf"$DB.tar.gz" $DB 2>/dev/null

popd 2>/dev/null

popd 2>/dev/null

mv /tmp/$DB.tar.gz ./ 2>/dev/null

rm -rf /tmp/$DB 2>/dev/null

fi

如果要备份服务器上的所有dbs,而不必担心调用dbs,请使用以下shell脚本:

#!/bin/sh

md=`which mongodump`

pidof=`which pidof`

mdi=`$pidof mongod`

dir='/var/backup/mongo'

if [ ! -z"$mdi" ]

then

if [ ! -d"$dir" ]

then

mkdir -p $dir

fi

$md --out $dir >/dev/null 2>&1

fi

这使用mongodump实用程序,如果没有指定,它将备份所有数据库。

你可以将它放在你的cronjob中,它只会在mongod进程运行时运行。如果不存在,它还将创建备份目录。

每个数据库备份都写入单个目录,因此您可以从全局转储中还原单个数据库。

您已经可以使用像Robomongo或Mongochef这样的GUI进行此类操作。

首先,启动Mongo DB - 为此,转到路径为 - >

C: Program Files MongoDB Server 3.2 bin并单击mongod.exe文件以启动MongoDB服务器。

Windows中的命令导出

用于将Windows中的MongoDB数据库从"远程服务器"导出到目录C:/ Users / Desktop / temp-folder中的本地计算机的命令,该远程服务器具有内部IP地址和端口。

C:> mongodump --host remote_ip_address:27017 --db -o C:/ Users / Desktop / temp-folder

Windows中要导入的命令

用于将Windows中的MongoDB数据库从本地计算机目录C:/ Users / Desktop / temp-folder / db-dir导入"远程服务器"的命令

C:> mongorestore --host = ip --port = 27017 -d C:/ Users / Desktop / temp-folder / db-dir

#mongodump using sh script

#!/bin/bash

TIMESTAMP=`date +%F-%H%M`

APP_NAME="folder_name"

BACKUPS_DIR="/xxxx/tst_file_bcup/$APP_NAME"

BACKUP_NAME="$APP_NAME-$TIMESTAMP"

/usr/bin/mongodump -h 127.0.0.1 -d -o $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME

tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME

rm -rf /home/wowza_analytics_bcup/wowza_analytics/wowza_analytics

### 7 days old backup delete automaticaly using given command

find /home/wowza_analytics_bcup/wowza_analytics/ -mindepth 1 -mtime +7 -delete

您可以使用mongodump命令执行此操作

Step 1 : Open command prompt

Step 2 : go to bin folder of your mongoDB installation (C:\Program Files\MongoDB\Server\4.0\bin)

Step 3 : then execute the following command

mongodump -d your_db_name -o destination_path

your_db_name = test

destination_path = C:\Users\HP\Desktop

导出的文件将在destination_path your_db_name文件夹中创建(在此示例中为C: Users HP Desktop test)

参考文献:o7规划

根据您的要求,有多种选择

1)如果要将数据库导出到另一个mongo数据库,则应使用mongodump。这将创建一个BSON文件的文件夹,其中包含JSON不具备的元数据。

mongodump

mongorestore --host mongodb1.example.net --port 37017 dump/

2)如果要将数据库导出为JSON,可以使用mongoexport,除非您必须一次执行一个集合(这是设计)。但是我认为用mongodump导出整个数据库然后转换为JSON最简单。

# -d is a valid option for both mongorestore and mongodump

mongodump -d

for file in dump/*/*.bson; do bsondump $file > $file.json; done

对于转储,您的数据库会暂停以下CMD

mongodump -d -o

Ex:mongodump -d qualetics -o D:\dbpackup\qualetics

打开连接

启动服务器

打开新的命令提示符

出口:

mongo/bin> mongoexport -d webmitta -c domain -o domain-k.json

进口:

mongoimport -d dbname -c newCollecionname --file domain-k.json

哪里

webmitta(db name)

domain(Collection Name)

domain-k.json(output file name)

它的mongoexport出口

问题是关于出口所有收藏品。

要以JSON格式导出,请按照您可以看到的命令执行此操作。

mongoexport --db dbname --collection collectionName --out directoryPATH/JSONfileName.json

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值