2016-09-30 4 views
0
  1. フルコレクション(名前は「自宅」など)をコピーします。
  2. 次に、 'home'コレクションでいくつかの変更を行うか、コレクション内のドキュメントを削除します(コレクションではありません)。
  3. そして項目からデフォルトの状態に変化し「ホーム」コレクションを置き換える1.

私は、次の操作を行います。pongongoを使ってMongoDBから1つのコレクションをコピーし、別の空のコレクションに貼り付けるにはどうしたらいいですか?

db = client["database"] 
home = db['home'].find() # get collection. 
db['home'].remove({}) # remove doc from home 
for i in home: 
     self.db['home'].insert(i) 

しかし、コレクションは空です。

+0

mongodbには「copyTo」という機能があります。あなたはそれを活用できます。 [https://docs.mongodb.com/manual/reference/method/db.collection.copyTo/](https://docs.mongodb.com/manual/reference/method/db.collection.copyTo/) – gzc

+0

を参照してください。しかし、私が「家」から文書を削除してからそれをコピーすると、それは空になります。 –

答えて

6

コード例の問題点は、find()は、コレクション内のすべてのドキュメントではなく、database cursorをコレクションに返します。だからremovehomeコレクションからのすべてのドキュメントは、カーソルも空のコレクションを指します。

同じサーバー内の別のコレクションにコレクションをコピーするためには、あなたが行うことができ、今MongoDB Aggregationオペレータ$matchとあなたの例のコードを使用して$out

pipeline = [ {"$match": {}}, 
      {"$out": "destination_collection"}, 
] 
db.source_collection.aggregate(pipeline) 

を利用することができ

db.collection.copyTo()は、MongoDB v3.0から非難されました。

他のMongoDBサーバーにコピーする場合は、db.cloneCollection()を利用できます。 PyMongoでは、それは、以下のコマンドのようになります。

db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"}) 

あなたの全体的な目標に応じて、MongoDB BackUp methodsが役に立つかもしれません。

+0

ありがとうございました。助けになる –

関連する問題