有什么简单的方法吗?
当前回答
如果RAM不是问题,使用insertMany比forEach循环快得多。
var db1 = connect('<ip_1>:<port_1>/<db_name_1>')
var db2 = connect('<ip_2>:<port_2>/<db_name_2>')
var _list = db1.getCollection('collection_to_copy_from').find({})
db2.collection_to_copy_to.insertMany(_list.toArray())
其他回答
我知道这个问题已经被回答了,但我个人不会做@JasonMcCays的回答,因为光标流的事实,这可能会导致无限的游标循环,如果集合仍在使用。相反,我将使用snapshot():
http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database
@bens的回答也很好,不仅适用于集合的热备份,而且mongorestore不需要共享同一个mongod。
我会滥用mongo cli mongo doc中的连接功能。这意味着您可以启动一个或多个连接。 如果您想将客户集合从test复制到同一服务器中的test2。首先你开始mongo shell
use test
var db2 = connect('localhost:27017/test2')
执行常规查找并将前20条记录复制到test2。
db.customer.find().limit(20).forEach(function(p) { db2.customer.insert(p); });
或者通过某些标准进行筛选
db.customer.find({"active": 1}).forEach(function(p) { db2.customer.insert(p); });
只需将localhost更改为IP或主机名即可连接到远程服务器。我使用它将测试数据复制到测试数据库进行测试。
您可以使用聚合框架解决您的问题
db.oldCollection.aggregate([{$out : "newCollection"}])
需要注意的是,oldCollection中的索引不会复制到newCollection中。
实际上,有一个命令用于将集合从一个数据库移动到另一个数据库。它只是不叫“移动”或“复制”。
若要复制集合,可以在同一数据库上克隆它,然后移动克隆的集合。
克隆:
> use db1
switched to db db1
> db.source_collection.find().forEach(
function(x){
db.collection_copy.insert(x)
}
);
移动:
> use admin
switched to db admin
> db.runCommand(
{
renameCollection: 'db1.source_collection',
to : 'db2.target_collection'
}
);
其他答案更适合复制集合,但如果您希望移动集合,这个答案尤其有用。
如果RAM不是问题,使用insertMany比forEach循环快得多。
var db1 = connect('<ip_1>:<port_1>/<db_name_1>')
var db2 = connect('<ip_2>:<port_2>/<db_name_2>')
var _list = db1.getCollection('collection_to_copy_from').find({})
db2.collection_to_copy_to.insertMany(_list.toArray())
推荐文章
- MongoDB在v4之前不兼容ACID意味着什么?
- 显示所有集合中的所有内容
- MongoDB:更新一个字段上的每个文档
- 我如何在MongoDB中部分更新一个对象,以便新对象将覆盖/合并现有的一个
- MongoDB的命名约定是什么?
- MongoDB在尝试插入整数时插入浮点数
- 通过将useNewUrlParser设置为true来避免“当前URL字符串解析器已弃用”警告
- 如何查询嵌套对象?
- NoSQL (MongoDB) vs Lucene(或Solr)作为您的数据库
- 如何重命名MongoDB中所有文档的字段?
- 如何复制一个集合从一个数据库到另一个在MongoDB
- 比较mongoose _id和字符串
- MongoDB:如何将多个集合中的数据合并为一个?
- MongoDB - admin用户未授权
- 如何在MongoDB的shell中打印出超过20个项目(文档)?