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

3

我找到了这个答案 - 答案链接

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

我想做同样的事情,但是针对集合中的前15000个文档,我找不到如何应用限制的方法(我尝试使用$limit : 15000,但它无法识别$limit)。

另外,当我尝试时 -

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

输出类型为“cursor”的对象没有“toArray()”函数。请指导我如何实现?

1
你尝试过使用 db.full_set.aggregate([ { $match: { date: "20120105" } }, { $limit : 15000 }, { $out: "subset" } ]); 吗? - chridam
我在 Jupyter 笔记本上运行此代码,它提示 "$" 不是有效的语法。 - Darpan
1个回答

1

好的,
在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()的解决方案必须将所有文档从服务器发送到客户端,然后再返回。即使服务器和客户端在同一台机器上,这也会造成性能损失。

真正帮助我理解这个答案的是-参考资料1
以及官方文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接