将MongoDB(3.0)集合的子集保存到Python中的另一个集合中

时间:2016-10-10 13:15:40

标签: python mongodb mongodb-query aggregation-framework mongodb-aggregation

我找到了这个答案 - Answer link

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

我想做同样的事情,但收集的前15000个文档,我无法找到如何对此类查询应用限制(我尝试使用$limit : 15000,但它没有识别$ limit )

当我尝试时 -

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

输出类型toArray()没有函数cursor

指导我如何完成它?

1 个答案:

答案 0 :(得分:0)

那么,
在python中,这就是事情的运作方式 - $limit需要包含在""中 并且您需要创建一个管道来将其作为命令执行。

在我的代码中 -

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

您需要用双引号括起所有内容,包括源集合和目标集合。 在db.command db中是数据库的对象(即dbclient.database_name)

根据这个答案 -

  

至少在我的情况下,它比forEach快100倍。这是因为整个聚合管道在mongod进程中运行,而基于find()和insert()的解决方案必须将所有文档从服务器发送到客户端然后再返回。即使服务器和客户端在同一台计算机上,这也会降低性能。

真正帮助我解决这个问题的那个 - Reference 1
official documentation