2017-02-15 8 views
0

MongoDBコレクションをあるデータベースから同じサーバー上の別のデータベースにコピーしようとしています。PyMongoを使用して、あるデータベースのコレクションを同じサーバー上の別のデータベースにコピーするにはどうすればよいですか?

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

私は、同じサーバー上db2.coll2db1.collをコピーしたいと思います。

How to copy a collection from one database to another in 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" } 

答えて

0

混乱と魂の検索の多くの後、私は最終的でした順序付けられたBSON辞書を期待しているMongoDBと(少なくとも3.6以前の)順序付けられていないPythonでのdictsにこれを追跡することができます。 OrderedDictを使用して

How to get ordered dictionaries in pymongo?決意で指摘したように、この:

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

別の方法としては、BSONからSONオブジェクトを使用することです。私は生のJavascriptのバージョンは以下ニシキヘビ見つける

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

が、それは私がすることなく、MongoDBの機能をテストするために許可されているため便利です。

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

別のアプローチは、eval()機能を使用してMongoDBのためにJavaScriptを渡すことですMongoDBシェルを起動します。私はPyMongo StackOverflowの質問に多くのことが言及されているのを見ていないので、ここに含める価値があると思った。

関連する問題