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

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

一、MongoDB与MySQL操作对比

MySQLMongoDB说明
mysqldmongod服务器守护进程
mysqlmongo客户端工具
mysqldumpmongodump逻辑备份工具
mysqlmongorestore逻辑恢复工具
db.repairDatabase()修复数据库
mysqldumpmongoexport数据导出工具
sourcemongoimport数据导入工具
grant * privileges on . to …Db.addUser()Db.auth()新建用户并权限
show databasesshow dbs显示库列表
Show tablesShow collections显示表列表
Show slave statusRs.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 usersdb.users.find({},{a:1, b:1})查询表
Select * from usersdb.users.find()查询表
Select * from users where age=33db.users.find({age:33})条件查询
Select a, b from users where age=33db.users.find({age:33},{a:1, b:1})条件查询
select * from users where age<33db.users.find({‘age’:{$lt:33}})条件查询
select * from users where age>33 and age<=40db.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=2db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )条件查询
select * from users limit 1db.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 usersDb.users.count()获取表记录数
select count(1) from users where age>30db.users.find({age: {‘$gt’: 30}}).count()获取表记录数
select DISTINCT last_name from usersdb.users.distinct(‘last_name’)去掉重复值
select * from users ORDER BY namedb.users.find().sort({name:-1})排序
select * from users ORDER BY name DESCdb.users.find().sort({name:-1})排序
EXPLAIN select * from users where z=3db.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 xxxdb.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’)删除用户
rootuse admin超级用户
grantdb.auth(‘test’, ‘test’)用户授权
select * from mysql.userdb.system.users.find()查看用户列表
select * from mysql.usershow 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_schemadb.users.dataSize()查看collection数据的大小
查看information_schemadb. 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要形象得多,我们在这里做一下笔记。

    原文作者:拾荒者charley
    原文地址: https://www.jianshu.com/p/59918f9b8be8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞