文章目录
  1. 1. 批量导入
    1. 1.1. 方法一
    2. 1.2. 方法二
    3. 1.3. 命令详解
  2. 2. 批量更新
    1. 2.1. 批量更新
    2. 2.2. mongo中的for语句
  3. 3. 批量导出
    1. 3.1. 命令详解
  4. 4. win和mac下的命令不一致
  5. 5. 参考

公司最近需要使用新的推荐系统,然后我负责对该推荐系统进行包装转发给客户端调用,但是最开始的工作不是去写代码,而是需要给北京的同事准备一份测试数据。本文主要就是记录如何批量导入,导出和更新mongodb数据。

批量导入

最开始需要在数据库中添加数据,本来可以通过Web页面添加的,但是需要添加的数据太多,效率实在太低,我只好自己写了个java程序生成了对应的JSON数据,然后批量导入到数据库中。

方法一

如果在win平台上使用MongoUVE这个软件进行import,只需要选择需要导入数据的表然后右键选择Add/Insert Document。。。,选择相应的数据文件导入即可。

方法二

如果在mac平台下,就只好使用命令导入了,首先需要将mongo添加到环境变量。

export MONGO_HOME=/Users/xiefuheng/Documents/Dev/tools/mongodb-osx-x86_64-2.6.5
export PATH=$PATH:$MONGO_HOME/bin

然后借助下列命令插入数据:

mongoimport -h 192.168.8.12:27017 -d db_search -c song --type json --file /Users/xiefuheng/Desktop/ttpod_search.json --upsert

命令详解

基本命令:

mongoimport -d db_name -c collection_name --file bak.json --type json

一些主要参数说明:

-d    指定把数据导入到哪一个数据库中
-c    指定把数据导入到哪一个集合中    
--type    指定导入的数据类型    
--file       指定从哪一个文件中导入数据    
--headerline    仅适用于导入csv,tsv格式的数据,表示文件中的第一行作为数据头
--upsert  以新增或者更新的方式来导入数据

更多参数请参考Mongodb-mongoimport

批量更新

导入了一些基本数据之后,我还需要导入更多的数据,虽然可以继续使用本来的方法,但是java程序生成数据比较麻烦,然后本身数据库中已经存在很多数据,并且这些数据也都是测试数据,只需要修改其中的channel_id为我需要的id并同时增加一个source字段就可以。

批量更新

db.table_name.update(where,setNew,upsert,multi ); 

其中:

where:类似于sql中的update 语句where后边的查询条件 
setNew:类似于sqlupdate语句中set后边的部分,也就是你要更新的部分     
upsert:如果要更新的那条记录没有找到,是否插入一条新纪录,默认为false不插入,true为插入     
multi :是否更新满足条件的多条的记录,false:只更新第一条,true:更新多条,默认为false 

实际我们的命令是:

db.song.update({"channel_id": 10}, {$set: {"channel_id": 100000, "source":0}}, false, true);

mongo中的for语句

类似于上面的语句有很多,一条一条执行实在很蛋疼,然后发现mongo中是有for语句的,果断写了一个:

for(int i=0; i<52; i++) {
    db.song.update({"channel_id": 10+i}, {$set: {"channel_id": 100000+i, "source":0}}, false, true);
}

一条指令轻松解决。(本身我的数据的channel_id就是连续的,所以可以这么使用)

批量导出

数据录入数据库之后,我还需要导出一份给北京的同事,而且我只需要本身数据库表中数据的部分字段,具体语句如下:

mongoexport -h 192.168.8.220:27017 -d admin_ttpod_dongting_com -c classify -q "{_id:{$gte:1045 }}" --fields name,channel_id,details -o /Users/xiefuheng/Desktop/test.json

命令详解

mongoexport --db db_name --collection collection_name --out bak.json

更多参数请参考官方文档:Mongodb-mongoexport

win和mac下的命令不一致

在Windows下,

mongoexport -h 192.168.8.220:27017 -d admin_ttpod_dongting_com -c classify -q "{_id:{$gte:1045 }}" --fields name,channel_id,details -o /Users/xiefuheng/Desktop/test.json

该条指令是可以正常执行的,但是在mac活着linux下,该条指令就会报错:

assertion: 16619 code FailedToParse: FailedToParse: First character in field must be [A-Za-z$_]: offset:7

需要修改成:

mongoexport -h 192.168.8.220:27017 -d admin_ttpod_dongting_com -c classify -q {"_id":{"$gte":1045 }} --fields name,channel_id,details -o /Users/xiefuheng/Desktop/test.json

-q需要指定一个JSON格式的数据,或者可以用一个文件写入查询条件,然后

-q `cat query.txt`

参考

  1. Mongodb-mongoimport
  2. Mongodb-update
  3. Mongodb-mongoexport
文章目录
  1. 1. 批量导入
    1. 1.1. 方法一
    2. 1.2. 方法二
    3. 1.3. 命令详解
  2. 2. 批量更新
    1. 2.1. 批量更新
    2. 2.2. mongo中的for语句
  3. 3. 批量导出
    1. 3.1. 命令详解
  4. 4. win和mac下的命令不一致
  5. 5. 参考