我找到了这个答案 - 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
。
指导我如何完成它?
答案 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