如果没有唯一元素,我应该如何从mongodb集合中删除重复?
我想在使用Java驱动程序时这样做。 在下面的图片中,一些记录是相同的。我想删除那些记录。时间不是这里唯一的关键。
P.S。:我只是以表格形式呈现数据。实际上有json数组形式。
答案 0 :(得分:0)
我认为你有两个选择:
List
,根据时间戳对其进行排序,比较列表中的条目并删除带有重复时间戳(和IP地址?)的项目。如果使用适当的密钥,使用HashSet
也可以这样做,您不必自己进行任何排序/比较,HashSet
在密钥已经存在时不会添加对象。< / LI>
答案 1 :(得分:0)
我同意其他用户的意见,他们指出,重复文档的存在可能表明您的应用程序存在一些问题,并且在插入之前消除重复文件比尝试稍后清理它们更好。你应该确保副本真的没有意义,并尝试确定它们的来源,比清理它们更优先。
也就是说,“复制”的含义似乎是“每个字段的值(_id
除外)是相同的”。因此,为了消除重复,我会做以下事情:
2计算所有非_id
字段
3将文档插入另一个表示一组重复项的集合
{
"_id" : #hash#,
"docs" : [#array of _ids of docs],
"count" : #number of _ids in docs array#
}
然后您将拥有所有重复项的记录,并且您可以迭代此集合并删除除{1}}之外的所有重复项之外的所有重复项。或者,如果您不想费心保留重复记录,可以插入一个散列为count > 1
的doc,并且每当发生哈希冲突时,删除当前文档,因为它是重复的(带有高概率)。