有什么简单的方法吗?
当前回答
目前,MongoDB中还没有这样的命令。请注意带有相关功能请求的JIRA票据。
你可以这样做:
db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_database>')['<collection_name>'].insert(d); });
请注意,在这种情况下,两个数据库需要共享同一个mongod才能正常工作。
除此之外,您还可以从一个数据库对一个集合进行mongodump,然后再将该集合恢复到另一个数据库。
其他回答
这并不能解决你的问题,但是mongodb shell有一个copyTo方法,可以将一个集合复制到同一个数据库中的另一个集合:
db.mycoll.copyTo('my_other_collection');
它还可以从BSON转换为JSON,所以mongodb /mongorestore是最好的方式,就像其他人说的那样。
我通常会这样做:
use sourcedatabase;
var docs=db.sourcetable.find();
use targetdatabase;
docs.forEach(function(doc) { db.targettable.insert(doc); });
你可以随时使用Robomongo。从v0.8.3开始,有一个工具可以通过右键单击集合并选择“将集合复制到数据库”来完成此操作。
具体操作请参见http://blog.robomongo.org/whats-new-in-robomongo-0-8-3/
由于这个特性在0.8.5版本中被移除,所以如果你想尝试的话,你将不得不使用0.8.3或0.8.4。
我会滥用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或主机名即可连接到远程服务器。我使用它将测试数据复制到测试数据库进行测试。
这可能只是一个特殊情况,但对于一个包含100k文档的集合,其中包含两个随机字符串字段(长度为15-20个字符),使用哑mapreduce几乎是find-insert/copyTo速度的两倍:
db.coll.mapReduce(function() { emit(this._id, this); }, function(k,vs) { return vs[0]; }, { out : "coll2" })
推荐文章
- js的Mongoose.js字符串到ObjectId函数
- mongodb中使用ISODate的日期查询似乎无法正常工作
- 如何更新文档数组中的对象(嵌套更新)
- 在猫鼬模式中添加created_at和updated_at字段
- 如何更新mongodb中的多个数组元素
- MongoDB和Mongoose的区别
- MongoDB在v4之前不兼容ACID意味着什么?
- 显示所有集合中的所有内容
- MongoDB:更新一个字段上的每个文档
- 我如何在MongoDB中部分更新一个对象,以便新对象将覆盖/合并现有的一个
- MongoDB的命名约定是什么?
- MongoDB在尝试插入整数时插入浮点数
- 通过将useNewUrlParser设置为true来避免“当前URL字符串解析器已弃用”警告
- 如何查询嵌套对象?
- NoSQL (MongoDB) vs Lucene(或Solr)作为您的数据库