Microsoft Cosmosdb for Mongodb:将未分片的集合合并为分片集合

Microsoft Cosmosdb for Mongodb:将未分片的集合合并为分片集合,mongodb,azure-cosmosdb-mongoapi,Mongodb,Azure Cosmosdb Mongoapi,我有两个相似文档的集合(即相同的对象,不同的值)。一个集合(X)在数据库A中被取消分片,另一个集合(Y)被分片并在数据库B中。当我尝试将集合X复制到数据库B中时,我得到一个错误,即“共享吞吐量集合应该有一个分区键”。我还尝试使用foreach-insert复制数据,但它花费的时间太长 所以我的问题是,如何有效地将数据从集合X附加到集合Y CosmosDB上的Mongodb版本是3.4.6您可以执行聚合并添加为最后一级$merge操作符 | $merge

我有两个相似文档的集合(即相同的对象,不同的值)。一个集合(X)在数据库A中被取消分片,另一个集合(Y)被分片并在数据库B中。当我尝试将集合X复制到数据库B中时,我得到一个错误,即“共享吞吐量集合应该有一个分区键”。我还尝试使用foreach-insert复制数据,但它花费的时间太长

所以我的问题是,如何有效地将数据从集合X附加到集合Y


CosmosDB上的Mongodb版本是3.4.6

您可以执行聚合并添加为最后一级
$merge
操作符

| $merge                                | $out                                       | 
| Can output to a sharded collection.   | Cannot output to a sharded collection.     | 
| Input collection can also be sharded. | Input collection, however, can be sharded. | 

所以我的问题是,如何将集合X中的数据附加到 以有效的方式收集Y

可以使用服务器工具和。您可以将源集合数据导出到BSON转储文件中,并导入到目标集合中。这些过程非常快,因为数据库中的数据已经是BSON格式

可以使用这些工具将数据从非分片集合导出到分片集合。在这种情况下,要求源集合具有具有值的shard key字段。注意:源集合中的索引也会被导出和导入(使用这些工具)

下面是一个有关场景的示例:

这将创建一个具有数据库名称的转储目录。其中将包含“srcecoll.bson”文件,用于导入

mongorestore --port 26xxxx --db=trgtdb --collection=trgtcoll --dir="C:\mongo\dumps\srcecoll.bson"
主机/端口连接到分片集群的
mongos
。注意:需要在
--dir
选项中指定bson文件名

导入会将数据和索引添加到现有分片集合中。该过程只插入数据;无法更新现有文档。如果源集合中的
\u id
值已存在于目标集合中,则该过程不会覆盖文档(并且不会导入这些文档,这不是错误)


对于
mongorestore
有一些有用的选项,例如:
--noIndexRestore
--dryRun

,因为目前CosmosDB中的MongoDb版本是3.4.6,它不支持$merge和许多其他命令,如collecton.copyTo等。使用Studio 3T的导入功能也没有帮助

我使用的解决方案是在本地mongodb上下载目标集合,清除它,然后编写java代码,从本地db读取我的清除数据,并将其插入到目标集合中。这样,数据将附加到目标集合。
我测量的速度是1m文档计数(~750MB)的2小时,当然,这个数字可能会因各种因素而有所不同,例如网络、文档大小等。

您知道这两个集合是否具有不同的
\u id
字段值集吗?是否有$merge命令的替代方案?使用支持mongodb至3.4版的cosmosdb。实际上,我想要一个类似于SQL命令联盟的东西,它将从集合B向集合A追加数据。哦,是的,cosmosdb不支持mongoimport,因为它提供自己的迁移服务。谢谢你的回答,但cosmosdb不支持mongorestore,因为它提供自己的迁移服务。而且服务不能将数据附加到现有集合中。它只能覆盖源集合有多大?它很大,所以使用insert和bulk insert将不起作用。大小约为7GB。你知道如何在没有$merge和insert bulk的情况下合并数据吗?
mongorestore --port 26xxxx --db=trgtdb --collection=trgtcoll --dir="C:\mongo\dumps\srcecoll.bson"