Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将MongoDB(3.0)集合的子集保存到Python中的另一个集合中_Python_Mongodb_Mongodb Query_Aggregation Framework_Mongodb Aggregation - Fatal编程技术网

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

将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需要包装在“, 您需要创建一个管道,将其作为命令执行 在我的代码中-

我找到了这个答案-

我想做同样的事情,但对于集合中的前15000个文档,我找不到如何对此类查询应用限制(我尝试使用
$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)