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