当前位置: 首页 > 知识库问答 >
问题:

在MongoDB中将文档从一个集合复制到另一个集合

呼延钱明
2023-03-14

我有一个问题,但在我看来,我看到的所有解决方案都在解决一个比我更复杂的问题。

我对MongoDB比较陌生,但我一直在将它与Apache Neach一起使用来存储抓取的文档。由于我分阶段抓取,并以不同的方式评估每个抓取的结果,以获取统计数据,因此我一直将结果存储在不同的集合中。

我所要做的就是把这些收藏放在一起成为一个大的收藏,这样我就可以翻译和分类。所有字段都是相同的,因此我不需要添加任何新字段。

这是我为每个集合使用的插入查询:

new_crawl_130422_data.insert_one(
                        {
                        "database_url": proj_database_url,
                        "database_project_id": proj_database_id,
                        "projectname": proj_database_name,
                        "version": version,
                        "boost": boost,
                        "content": content,
                        "digest": digest,
                        "title": title,
                        "timestamp": timestamp,
                        "url": website,
                        "language": language

                        }

因此,集合1和集合2具有相同的字段。显然,每个集合中会有多个文档具有相同的database_project_id,因为这些是基于匹配的url映射的记录,并且它们是从Solr传输的。如果项目名称和url匹配,则文档已被分配project_id,以表明它包含该项目的数据。

我认为可以像列表一样将一个集合添加到另一个集合的末尾,但我已经研究了这些解决方案-将一个集合中的少数文档复制到mongo DB中的另一个集合,将一个集合中的所有文档插入MongoDB数据库中的另一个集合,Spring data mongodb-复制一个集合,它们似乎都在做比我需要的更复杂的事情。

我不想更改任何集合,只需将两个或多个集合放在一起创建一个大集合。

我也看到了这个-https://www.mongodb.com/docs/v4.2/reference/method/db.collection.copyTo/,但它已被弃用。

提前谢谢。

共有1个答案

詹正浩
2023-03-14

如果要复制所有数据,只需运行:

db.new_crawl_130422_data.aggregate([
    {$out: "secondCollection"}
])

注意,secondCollection中的所有现有数据都将被删除。如果要添加,即合并文档并保留现有数据,请使用:

db.new_crawl_130422_data.aggregate([
    {$merge: "secondCollection"}
])

如果您有一个大型数据集,请参阅如何在MongoDB中将集合从一个数据库复制到另一个数据库

 类似资料: