将MongoDB(3.0)集合的子集保存到Python中的另一个集合中
我找到了这个答案- 我想做同样的事情,但对于集合中的前15000个文档,我找不到如何对此类查询应用限制(我尝试使用将MongoDB(3.0)集合的子集保存到Python中的另一个集合中,python,mongodb,mongodb-query,aggregation-framework,mongodb-aggregation,Python,Mongodb,Mongodb Query,Aggregation Framework,Mongodb Aggregation,我找到了这个答案- 我想做同样的事情,但对于集合中的前15000个文档,我找不到如何对此类查询应用限制(我尝试使用$limit:15000,但它无法识别$limit) 当我试着 db.subset.insert(db.full_set.find({}).limit(15000).toArray()) 输出类型cursor没有函数toArray()。 指导我如何完成它?好吧, 在python中,这就是工作原理-$limit需要包装在“, 您需要创建一个管道,将其作为命令执行 在我的代码中-
$limit:15000
,但它无法识别$limit)
当我试着
db.subset.insert(db.full_set.find({}).limit(15000).toArray())
输出类型cursor
没有函数toArray()
。
指导我如何完成它?好吧,
在python中,这就是工作原理-
$limit
需要包装在“
,您需要创建一个管道,将其作为命令执行 在我的代码中-
pipeline = [{ '$limit': 15000 },{'$out': "destination_collection"}]
db.command('aggregate', "source_collection", pipeline=pipeline)
您需要将所有内容用双引号括起来,包括源集合和目标集合。
在db.command
db中,db是数据库的对象(即dbclient.database\u name)
根据这个答案-
至少在我的情况下,它比forEach快100倍。这是因为整个聚合管道在mongod进程中运行,而基于find()和insert()的解决方案必须将所有文档从服务器发送到客户端,然后再发送回客户端。即使服务器和客户端在同一台机器上,这也会造成性能损失
真正帮助我找到答案的人-
和您是否尝试了
db.full_set.aggregate([{$match:{date:{20120105},{$limit:15000},{$out:{$subset}])代码>?我在Jupyter笔记本上运行这个,它说“$”不是有效的语法。
pipeline = [{ '$limit': 15000 },{'$out': "destination_collection"}]
db.command('aggregate', "source_collection", pipeline=pipeline)