mongo从一个集合复制到另一个集合(在同一个数据库中)

Mar*_*luk 25 mongodb

我有mongo db调用test,在这个db中有两个集合collection1collection1_backup.如何用来替换collection1数据的内容collection1_backup.

Sam*_*aye 42

完成此操作的最佳方式(考虑到集合的名称结尾_backup)可能是使用了mongorestore:http://docs.mongodb.org/manual/reference/mongorestore/

但在这种情况下,它取决于.如果集合未加密,您可以使用renameCollection(http://docs.mongodb.org/manual/reference/command/renameCollection/)或者您可以使用更加手动的方法(在JavaScript代码中):

db.collection1.drop(); // Drop entire other collection
db.collection1_backup.find().forEach(function(doc){
   db.collection1.insert(doc); // start to replace
});
Run Code Online (Sandbox Code Playgroud)

这些是最常用的方法.

  • 与聚合相反的最慢方法。 (2认同)

Mar*_*luk 5

也有用:将集合导出到 json 文件

mongoexport --collection collection1_backup --out collection1.json
Run Code Online (Sandbox Code Playgroud)

从json文件导入集合

mongoimport --db test --collection collection1 --file collection1.json
Run Code Online (Sandbox Code Playgroud)

从备份/转储文件中导入单个集合需要将 *.bson 文件转换为 *.json 使用

bsondump collection1_backup.bson > collection1_backup.json
Run Code Online (Sandbox Code Playgroud)

  • 通常,在复制集合时最好使用 `mongodump` 和 `mongorestore`,因为将文档转换为 JSON 并返回可能会影响 [数据类型保真度](http://docs.mongodb.org/manual/administration/import-导出/#data-type-fidelity)。BSON 中存在一些数据类型,它们可以具有 [JSON 中的不同表示](http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON),其中没有严格的 JSON 等效项。根据您的数据,使用 `mongoimport`/`mongoexport` 可能没问题,但这是一个需要注意的重要警告。 (10认同)

小智 5

这可以使用简单的命令来完成:

db.collection1_backup.aggregate([ { $match: {} }, { $out: "collection1" } ])
Run Code Online (Sandbox Code Playgroud)

此命令将删除 collection1 的所有文档,然后在 collection1 中创建 collection1_backup 的克隆。

通用命令将是

db.<SOURCE_COLLECTION>.aggregate([ { $match: {} }, { $out: "<TARGET_COLLECTION>" } ])
Run Code Online (Sandbox Code Playgroud)

如果 TARGET_COLLECTION 不存在,上面的命令将创建它。