【MongoDB】MongoDB如何实现insert tab select操作

前言:今天在整理笔记的时候发现前段时间处理的MongoDB数据处理的事情,作为一个MySQL DBA,在MySQL的世界里驰骋,却在MongoDB的阴沟里翻了船。

一、MongoDB与MySQL操作对比

MySQL MongoDB 说明
mysqld mongod 服务器守护进程
mysql mongo 客户端工具
mysqldump mongodump 逻辑备份工具
mysql mongorestore 逻辑恢复工具
- db.repairDatabase() 修复数据库
mysqldump mongoexport 数据导出工具
source mongoimport 数据导入工具
grant * privileges on . to … Db.addUser()Db.auth() 新建用户并权限
show databases show dbs 显示库列表
Show tables Show collections 显示表列表
Show slave status Rs.status 查询主从状态
Create table users(a int, b int) db.createCollection("mycoll", {capped:true,size:100000}) 创建表,另:可隐式创建表。
Create INDEX idxname ON users(name) db.users.ensureIndex({name:1}) 创建索引
Create INDEX idxname ON users(name,ts DESC) db.users.ensureIndex({name:1,ts:-1}) 创建索引
Insert into users values(1, 1) db.users.insert({a:1, b:1}) 插入记录
Select a, b from users db.users.find({},{a:1, b:1}) 查询表
Select * from users db.users.find() 查询表
Select * from users where age=33 db.users.find({age:33}) 条件查询
Select a, b from users where age=33 db.users.find({age:33},{a:1, b:1}) 条件查询
select * from users where age<33 db.users.find({'age':{$lt:33}}) 条件查询
select * from users where age>33 and age<=40 db.users.find({'age':{$gt:33,$lte:40}}) 条件查询
select * from users where a=1 and b='q' db.users.find({a:1,b:'q'}) 条件查询
select * from users where a=1 or b=2 db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) 条件查询
select * from users limit 1 db.users.findOne() 条件查询
select * from users where name like "%Joe%" db.users.find({name:/Joe/}) 模糊查询
select * from users where name like "Joe%" db.users.find({name:/^Joe/}) 模糊查询
select count(1) from users Db.users.count() 获取表记录数
select count(1) from users where age>30 db.users.find({age: {'$gt': 30}}).count() 获取表记录数
select DISTINCT last_name from users db.users.distinct('last_name') 去掉重复值
select * from users ORDER BY name db.users.find().sort({name:-1}) 排序
select * from users ORDER BY name DESC db.users.find().sort({name:-1}) 排序
EXPLAIN select * from users where z=3 db.users.find({z:3}).explain() 获取存储路径
update users set a=1 where b='q' db.users.update({b:'q'}, {$set:{a:1}}, false, true) 更新记录
update users set a=a+2 where b='q' db.users.update({b:'q'}, {$inc:{a:2}}, false, true) 更新记录
delete from users where z="abc" db.users.remove({z:'abc'}) 删除记录
delete from tb1; db. users.remove() 删除所有的记录
drop database IF EXISTS test; use testdb.dropDatabase() 删除数据库
drop table IF EXISTS test; db.mytable.drop() 删除表/collection
grant xxx db.addUser(‘test’, ’test’) 添加用户readOnly-->false
- db.addUser(‘test’, ’test’, true) 添加用户readOnly-->true
set password for xx@xx = password(''); db.addUser("test","test222") 更改密码
drop user xx@xx; db.system.users.remove({user:"test"})或者db.removeUser('test') 删除用户
root use admin 超级用户
grant db.auth(‘test’, ‘test’) 用户授权
select * from mysql.user db.system.users.find() 查看用户列表
select * from mysql.user show users 查看所有用户
show table status from t; db.printCollectionStats() 查看各collection的状态
show slave status; db.printReplicationInfo() 查看主从复制状态
show profiles; show profile 查看profiling
- db.copyDatabase('mail_addr','mail_addr_tmp') 拷贝数据库
查看information_schema db.users.dataSize() 查看collection数据的大小
查看information_schema db. users.totalIndexSize() 查询索引的大小

二、insert tab select怎么操作

var docs = db.tab1.find({"checked":false}).limit(0,500);

docs.forEach(function(d){db.tab2.insert(d)});

db.tab2.find({"checked":false}).count()

MongoDB需要做的是先声明一个变量,从tab1查询出你所需要插入的数据,然后利用构造函数循环插入tab2。
我们再来看下MySQL是怎么做的。

mysql> create table t1(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 values(1);
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 values(2);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 values(3);
Query OK, 1 row affected (0.00 sec)

mysql> create table t2(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t2 select * from t1;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

按照我们的思维,MySQL要形象得多,我们在这里做一下笔记。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容