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

Ros*_*jan 2 arrays collections mongodb

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

我对 MongoDB 比较陌生,但我一直将它与 Apache Nutch 一起使用来存储爬网文档。当我分阶段爬行并以不同方式评估每个爬行结果时,为了获取统计信息,我一直将结果存储在不同的集合中。

我想做的就是将这些集合整合到一个大集合中,以便我可以翻译和分类。所有字段都是相同的,因此我不需要添加任何新字段。

这是我一直在每个集合中使用的插入查询:

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

                        }
Run Code Online (Sandbox Code Playgroud)

因此,集合 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/,但它已被弃用。

提前致谢。

Wer*_*eit 7

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

db.new_crawl_130422_data.aggregate([
    {$out: "secondCollection"}
])
Run Code Online (Sandbox Code Playgroud)

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

db.new_crawl_130422_data.aggregate([
    {$merge: "secondCollection"}
])
Run Code Online (Sandbox Code Playgroud)

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