如何在MongoDB查找重复内容

598 阅读5分钟

在从事数据库工作时,你是否听说过数据复制的概念?当一条记录、一件事、一个人或一个地方有其精确的副本时,这个副本就被说成是原始记录的重复。在传统数据库中工作时,我们使用WHERE子句来找出表内记录的重复,即SQL、PostgreSQL。另一方面,MongoDB不允许你使用WHERE子句来找出插入特定数据库集合中的重复内容。

它想出了一个聚合函数来找出集合中的重复值。在今天的文章中,我们将讨论在Mongo DB集合中插入重复的记录,并使用集合的聚合命令在MongoDB外壳上显示它们。让我们通过在Ubuntu 20.04系统的终端外壳中使用apt更新和升级指令来开始我们今天的文章。为此,你需要先登录并通过使用 "Ctrl+Alt+T "打开外壳。之后,你可以在你的shell尝试下面所示的指令,并添加用户的密码以继续更新过程。"

它可能需要你确认才能继续这个过程。在问到 "你想继续吗?"时点 "y"。之后,点击回车键。

根据你的系统情况,它可能需要更多或更少的时间来处理。

在完成更新后,你会得到如下所示的最后几行处理结果。

在系统更新和升级成功后,我们必须打开MongoDB shell,在数据库中插入一些集合和记录。所以,我们一直在使用 "mongo "查询来做这件事,如图中所示。shell已经准备成功。

在MongoDB shell上使用 "db "指令时,我们发现 "test "数据库可以供我们使用。

因此,我们一直在使用 "test "数据库进行进一步的查询并在其中创建集合。为此,请尝试使用 "use "指令,后面跟一个数据库的名字,即 "test"。

为了增加记录,我们需要在测试数据库中建立一个集合。因此,我们需要创建一个新的集合。为此,我们必须尝试使用 "db "指令以及MongoDB的 "createCollection() "函数,在其括号内跟上一个新集合的名称,即Data。查询成功了,根据状态 "ok.",集合被成功创建。1".此外,在MongoDB中,我们倾向于利用find()函数,在其前面加上集合名称,以显示特定集合的记录。因此,我们尝试在 "db "指令后面加上集合名称,即Data,并使用find()函数来做这件事。现在 "Data "这个集合是空的。因此,我们需要在这个集合中添加一些记录。

为了在MongoDB的Data集合中插入记录,我们需要在 "db "指令中尝试使用insert()函数,同时将数据以文档的形式,即列表格式插入。我们总共使用了4列集合的文档数据,即_id、标题、年龄和价格。我们为数据集合的所有这4列共添加了5条记录。

根据上面的输出显示 "nInserted "选项的记录数为5,该记录被成功添加。在这之后,我们将使用find()函数在 "Data "集合中找到并显示这个集合的所有记录。我们没有给find()函数的括号传递任何参数,以不限制集合的记录。Data集合的所有5条记录已经呈现在Mongo DB shell中。

由于我们一直在处理寻找MongoDB集合中的重复记录的话题,我们在集合中也一定有一些重复的记录。因此,我们在数据集合中又插入了三条记录,作为已经插入的一些记录的重复。我们只需要更新"_id "列,因为任何列的ID在MongoDB中都必须是唯一的,就像我们以前在传统数据库中一样。到目前为止,在 "数据 "集合名称下已经使用了相同的插入函数。所有的三条记录都已被添加。

现在,当你在MongoDB shell上再次运行集合名为 "Data "的 "db "指令和find()函数时,屏幕上将会显示总共8条记录。我们可以看到在这个集合数据中,除了"_id "以外的列都有重复的值。

现在是时候为 "数据 "集合尝试使用aggregate()方法来列出其中重复的具体列值了。你需要使用MongoDB中聚合命令的下图语法。选项"group"用于将某一特定列的所有重复值加在一起,而选项"group "用于将某一特定列的所有重复值加在一起,而选项"match "将被用来找出具有1个以上文档的组。另一方面,"project"选项将被用来指定显示重复记录的格式。project "选项将被用来指定显示重复记录的格式。group "选项的第一个字段将指定我们要搜索的重复记录的列名。在一个数据集合的 "标题 "列中,总共发现了3条重复的记录。之后,对 "年龄 "列进行了同样的查询,又得到了3条结果。

总结

在介绍性段落中已经给出了重复记录的解释,我们已经讨论了从传统数据库和MongoDB中找出重复记录的区别。为此,我们试图给出一个例子,说明在MongoDB中建立一个新的集合,并在其中插入记录。此外,我们还讨论了如何使用聚合函数来找出集合中包含重复值的特定列。这篇文章显示了MongoDB与其他数据库在查找重复值方面的明显区别。