MongoDB如何复制collection里的数据到另一个collection方法总结

MongoDB的可以直接复制数据库,但是对于数据库里的表却没有直接的复制语句。在项目中遇到数据放错collection了情况就很棘手,现在将方法总结如下:

1、使用工具Studio 3T for MongoDB

选择一个数据库中的Collections集合,然后按住 Ctrl+C 复制快捷键会弹出如下帮助框。

点击 Ctrl+V 粘贴快捷键,重命名一下复制的名称即可。

2、使用工具Robo 3T

在Collection中,右键选择复制Collection

然后重命名即可

3、利用foreach方法在shell里直接运行

db.test(复制源表).find().forEach(function(x){
    db.target(目的表).insert(x);
})

4、在Java里操作,代码如下

import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
public class DBtransfer {
        public static void main(String[] args) {
              MongoClient client = new MongoClient( "000.00.00.000", XXXXX); //数据库地址
              MongoDatabase database = client.getDatabase( "XXX" );  //数据库名
              MongoCollection<Document> collection = database .getCollection("XXXX" ); //要转移数据的表名
              MongoCollection<Document> collection2 = database .getCollection("XXXX" );//放入的表名
              FindIterable<Document> findIterable = collection .find(); //iterator——迭代
              MongoCursor<Document> mongoCursor = findIterable .iterator();  //游标
              while (mongoCursor .hasNext()){
                     Document d  = mongoCursor .next(); //遍历每一条数据
                     collection2 .insertOne(d );
                    // System.out.println( mongoCursor.next() );
              }
              System. out .println("转移成功" );
//            System.out.println(collection.find().toString());
       }
}

5、克隆collection

1)克隆远程colletion,使用cloneCollection命令完成将远程的collection复制到本地。

命令格式:db.runCommand({cloneCollection:"集合",from:"原机器",copyIndexes:false}),copyIndexes:是否复制索引

例子:132.42.33.175上test库t1表上有一条数据

> db.t1.find()
{ "_id" : ObjectId("4fd9a4bf186cb1b6ac95907d"), "name" : "liangzhangping", "addr" : "beijing" }

132.42.33.190上test库上t1表有两条条数据

> db.t1.find()
{ "_id" : ObjectId("4fd9c517dcde2d0e33d08c76"), "name" : "liangzhangping", "age" : 28 }
{ "_id" : ObjectId("4fda1795a3d56c6a40f2bc26"), "name" : "liangzhangping", "addr" : "jiangxi" }

现在将132.42.33.175上test库t1表的数据克隆到132.42.33.190上test库上t1表上,操作如下:

a、登录132.42.33.190机器上执行:

> db.runCommand({cloneCollection:"test.t1",from:"132.42.33.175:28010"})
{ "ok" : 1 }

b、查看验证

> db.t1.find()
{ "_id" : ObjectId("4fd9c517dcde2d0e33d08c76"), "name" : "liangzhangping", "age" : 28 }
{ "_id" : ObjectId("4fda1795a3d56c6a40f2bc26"), "name" : "liangzhangping", "addr" : "jiangxi" }
{ "_id" : ObjectId("4fd9a4bf186cb1b6ac95907d"), "name" : "liangzhangping", "addr" : "beijing" }

2)克隆本地collection,MongoDB没有提供命令进行本地复制,但我们可以写一个循环插入的方法完成,

参考上述3的循环插入代码


赞(52) 打赏
未经允许不得转载:优客志 » 数据库
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏