当前位置: 首页 > 知识库问答 >
问题:

复制mongob集合

黎征
2023-03-14

使用C在同一台服务器上复制Mongodb中的集合的正确方法是什么?MongoVUE有一个选项“Duplicate collection”,C有类似的选项吗?

共有2个答案

邹晟睿
2023-03-14

我也有同样的问题,但是当公认的答案有效时,我也需要尽快解决。

复制集合的最快方法显然是使用带有管道阶段的聚合。这样,你就不必下载所有的文档然后重新上传,它们只是复制到数据库中。

这在mongo shell中执行起来很简单:

db.originalColl.aggregate([ { $match: {} }, { $out: "resultColl"} ]);

然而,我在从C#运行这个时遇到了很多麻烦。由于eval现在已被弃用,因此您不能将上述内容填入字符串中,以便在服务器上执行。相反,您需要构造一个表示上述代码的Bson文档。

以下是我是如何做到这一点的:

var aggDoc = new Dictionary<string,object>
{
    {"aggregate" , "originalCollection"},
    {"pipeline", new []
        {
            new Dictionary<string, object> { { "$match" , new BsonDocument() }},
            new Dictionary<string, object> { { "$out" , "resultCollection"}}
        }
    }
};

var doc = new BsonDocument(aggDoc);
var command = new BsonDocumentCommand<BsonDocument>(doc);
db.RunCommand(command);

这被证明是非常快的(大约3分钟复制5M文档),并且没有数据在db和运行上述代码的应用程序之间传输。一个缺点是它创建了一个临时集合,因此在操作完成之前athtCollection将是空的(或者不存在)。所以如果你有一个进度条,它将不再工作。

白才艺
2023-03-14

没有使用C#驱动程序复制集合的内置方法,但您仍然可以简单地做到这一点:

var source = db.GetCollection("test");
var dest = db.GetCollection("testcopy");
dest.InsertBatch(source.FindAll());

但是,请注意,这不会复制源集合中的任何索引。shell的copyTo方法具有相同的限制,因此它的实现可能类似。

 类似资料:
  • 我试图连接两个conainers使用网络docker,但由于某种原因,我得到一个错误: MongoNetworkError:在第一次连接时无法连接到服务器[db:27017][错误:connect-EConRefuse172.22.0.3:27017] 有什么建议吗? 谢谢 docker-compose.yml

  • 问题内容: 有没有办法复制?也就是说,有可能去 还是您需要物理遍历这些集合并一一复制? 问题答案: 另一种方法是使用复制构造函数: 或创建一个空集并添加元素: 与这些不同,您可以使用不同的集合类,不同的比较器,甚至使用其他(非集合)集合类型填充。 请注意,复制a的结果是一个新的,包含对作为原始元素的对象的引用。元素对象本身不会被复制或克隆。这符合Java API设计的工作方式:它们不复制元素对象。

  • 问题内容: 我正在实现一个负责订购java.util.List的Java类。当我使用此类时,问题就来了。我可以订购列表,但我想复制“原始”列表而不作任何修改,这样我就可以在原始列表上注册所有更改。排序的列表包含对象,并且其字段之一存储分类ID,并使用列表的索引值更新此ID。 我尝试使用克隆方法,它使列表保持未排序状态,但原始列表上所做的更改也会在克隆列表中更新。 有什么办法可以做到? 我的代码:

  • 有人能说我怎么能得到响应从API使用HttpHandler方法通过给头参数?这是我的Httphandler java代码 我需要添加两个头参数1-

  • 我正在尝试在两个MySQL集群之间使用单个复制通道设置复制。我已经看了mysql.com的文档几次了,但似乎不能让它正常工作。 我遇到的问题是,对未配置为主服务器的SQL节点进行的查询不会复制NDBCLUSTER表的任何INSERT、UPDATE或DELETE查询,然而,当我在作为主服务器的SQL节点上插入、更新或删除一行时,它会很好地复制到其他集群。 我知道复制是设置的,因为如果我在主集群中的任

  • 问题内容: 我正在本地计算机上的Tomcat 7上设置群集/复制,以评估它是否可与我的环境/代码库一起使用。 建立 我在不同端口上运行的同级目录中有两个相同的tomcat服务器。我已经在其他两个端口上监听了httpd,并作为VirtualHosts连接到了两个tomcat实例。我可以在配置的端口上访问两种环境并与之交互。一切都按预期进行。 Tomcat服务器在server.xml中启用了集群功能: