2

我找到了這個答案 - Answer link的MongoDB(3.0)集合的子集保存到另一個集合在Python

db.full_set.aggregate([ { $match: { date: "20120105" } }, { $out: "subset" } ]); 

我希望做同樣的事情,但在第一次採集15000頁的文件,我找不到如何適用限制這樣的查詢(我嘗試使用$limit : 15000,但它不承認$限制)

還當我嘗試 -

db.subset.insert(db.full_set.find({}).limit(15000).toArray()) 

沒有FUNCT輸出類型爲cursor的離子toArray()

指導我如何實現它?

+1

你嘗試'db.full_set.aggregate([{$比賽:{日期 「20120105」}, {$ limit:15000},{$ out:「subset」}]);'? – chridam

+0

我在Jupyter筆記本上運行它,它說「$」不是一個有效的語法。 – Darpan

回答

0

好,
在python ,這是如何工作 - $limit需要被包裹在""
,你需要創建一個管道來執行它的命令。

在我的代碼 -

pipeline = [{ '$limit': 15000 },{'$out': "destination_collection"}] 
    db.command('aggregate', "source_collection", pipeline=pipeline) 

你需要用雙引號,包括您​​的源和目標集合包裝的一切。 而在db.command分貝是你的數據庫對象(即dbclient.database_name)

按照這個答案 -

它比的forEach至少快100倍左右在我的情況。這是因爲整個聚合管道在mongod進程中運行,而基於find()和insert()的解決方案必須將所有文檔從服務器發送到客戶端,然後再發回。即使服務器和客戶端在同一臺計算機上,性能也會受到影響。

的一個真正幫助我弄清楚這個答案了 - Reference 1
official documentation