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

如何使用PyMongo将集合从一个数据库复制到同一服务器上的另一个数据库?

卫皓
2023-03-14

我试图将MongoDB集合从一个数据库复制到同一服务器上的另一个数据库。

from pymongo import MongoClient
client = MongoClient()
client.db1.coll1.insert({'content':'hello world'})

我想复制db1。coll到db2。coll2在同一台服务器上。

我试图遵循《如何在MongoDB中将集合从一个数据库复制到另一个数据库》中描述的“复制并移动”方法,但这在pymongo中不起作用。

特别是复制步骤

client.db1.coll1.aggregate([{'$out':'coll2'}])

工作,但我在尝试执行移动时收到错误:

>>> client.admin.command({'renameCollection':'db1.coll2', 'to':'db2.coll2'})
OperationFailure: no such command: 'to', bad cmd: '{ to: "db2.coll2", renameCollection: "db1.coll2" }

共有1个答案

苏鹏鹍
2023-03-14

在经历了大量的困惑和自我反省之后,我最终能够找到Python中的dicts是无序的(至少在3.6之前),MongoDB希望有一个有序的BSON字典。

在pymongo中使用OrderedDict(如如何获取有序词典中所述)?解决此问题:

>>> from collections import OrderedDict
>>> client.admin.command(
    OrderedDict([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}

另一种选择是使用来自BSON的SON对象。

>>> import bson
>>> client.admin.command(
    bson.son.SON([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}

另一种方法是使用eval()函数将Javascript传递给MongoDB:

>>> client.admin.eval(
    "db.runCommand({'renameCollection':'db1.coll2', 'to':'db2.coll2'})") 
{u'ok': 1.0}

我发现原始Javascript版本不太像python,但很有用,因为它允许我在不启动MongoDB shell的情况下测试MongoDB功能。我还没有看到它在PyMongo StackOverflow问题上提到太多,所以我认为值得在这里包括。

 类似资料:
  • 有没有一个简单的方法可以做到这一点?

  • 问题内容: 如何从一个数据库复制到另一个数据库。 数据库名称visco 我想将所有表从visco数据库复制到新数据库名称作为neptune 我创建了一个没有任何表的数据库,然后尝试从database1.bak文件还原数据库,然后显示错误为 需要查询帮助 问题答案: 使用SQL Server Management Studio: 选项1 ->右键单击要复制的数据库 ->选择“任务”>“生成脚本” -

  • 问题内容: 我需要将表从一个数据库复制到另一个数据库。这将是一个cronjob。哪一种是最好的方法?PHP脚本或Shell脚本。PHP的问题是,两个数据库都有不同的用户名和密码,所以我不能这样做。 我应该只连接第一个DB以获得所有记录,然后使用WHILE循环将所有记录插入新数据库,还是有更好的方法? 我更喜欢用shell脚本代替PHP脚本来执行此操作。 谢谢 问题答案: 我把它丢了。比任何基于PH

  • 问题内容: 我需要将数据从一个表复制到另一个表。这两个表几乎具有相同的结构,但是位于不同的数据库中。 我试过了 我尝试此操作,但跨数据库出现错误…未实现 问题答案: 这是一个非常简单的任务。只需为此目的使用dblink: 如果您需要定期从外部数据库中获取数据,明智的做法是定义服务器和用户映射。然后,您可以使用较短的语句:

  • 问题内容: 我有两个数据库,一个叫做,一个叫做。由于我想练习插入,更新内容,因此我想将某些表从复制到。 我要复制的表称为: 我试图做的是(使用SSMS)右键单击表格,但其中没有“复制”! 问题答案: 假设您有两个数据库,例如A和B: 如果目标表不存在,将创建以下脚本(我不建议这样): INTO COPY_TABLE_HERE FROM A.dbo.table_from_A table_A 如果目标

  • 问题内容: 我正在尝试将数据从一个数据库复制到另一个数据库。一切工作正常,直到修改了源数据库中的一行之一(下面的堆栈跟踪)。按预期将新行添加到目标数据库。 对于每个数据库连接(mysql和hsqldb),我都有一个由以下bean组成的上下文文件: 在我为每个数据库连接中创建一个: 很简单: 我正在使用Spring Integration将2种服务方法连接在一起。服务方法如下: 我尝试过从s 分离列