mongodb - mongo查找不使用某人索引的数据
问题描述
我有一个唯一索引,但是现在有些数据没有这个索引,导致数据重复,我想把这部分数据找出来,我想查询没有这个索引的数据。像这样:
MongoDB shell version v3.6.8
MongoDB server version: 4.0.12
# there is no not_hint func
db.col.find().not_hint("md5_1_domain_1_ip_1_uri_1")
# hint not allowed to use $ne
db.col.find()._addSpecial("$hint", {"$ne": {"md5" : 1, "domain" : 1, "ip" : 1, "uri" : 1}})
唯一索引
{
"v" : 2,
"key" : {
"md5" : "hashed"
},
"name" : "md5_hashed",
"ns" : "mdm.col"
},
{
"v" : 2,
"unique" : true,
"key" : {
"md5" : 1,
"domain" : 1,
"ip" : 1,
"uri" : 1
},
"name" : "md5_1_domain_1_ip_1_uri_1",
"background" : true,
"ns" : "mdm.col"
}
数据,我修改了一些敏感信息,我确信它们是一样的。并且无法通过唯一索引查询数据。仅使用 _id 或其他索引进行查询。
mongos> db.col.find({ "_id" : ObjectId("5fb2df3b32b0f42dced04ea7")})
{ "_id" : ObjectId("5fb2df3b32b0f42dced04ea7"), "domain" : null, "ip" : 1, "md5" : BinData(5,"anQTYWNGHKoj4xx+KTjNxQ=="), "uri" : "x * 1025", "count" : 6, "fseen" : ISODate("2019-08-03T13:56:38Z"), "lseen" : ISODate("2019-08-03T13:56:38Z"), "sha1" : null, "sha256" : null, "src" : [ "xx2", "xx3" ] }
mongos> db.col.find({'_id': ObjectId('5fb2df3d32b0f42dced0721d')})
{ "_id" : ObjectId("5fb2df3d32b0f42dced0721d"), "domain" : null, "ip" : 1, "md5" : BinData(5,"anQTYWNGHKoj4xx+KTjNxQ=="), "uri" : "x * 1025", "count" : 6, "fseen" : ISODate("2019-08-03T13:56:38Z"), "lseen" : ISODate("2019-08-03T13:56:38Z"), "sha1" : null, "sha256" : null, "src" : [ "xx2", "xx3" ] }
mongos> db.col.find({"md5": BinData(5,"anQTYWNGHKoj4xx+KTjNxQ=="), "uri": "x * 1025", "ip": 1}
mongos> # it is None
而这个信息:
mongos> db.col.find().count()
5549020886
mongos> db.col.find().hint("md5_1_domain_1_ip_1_uri_1").count()
5521037206
uri 长度超过 1024 并且数据没有被索引。我想找到那个 27983680 术语数据并修复它。
谢谢
解决方案
奇怪怎么可能。无论如何,您可以使用此聚合管道找到重复数据:
db.col.aggregate([
{
$group: {
_id: {
md5: "$md5",
domain: "$domain",
ip: "$ip",
uri: "$uri"
}
},
count: { $sum: 1 },
ids: { $push: "$_id" }
},
{ $match: { count: { $gt: 1 } } }
], { allowDiskUse: true })
结果具有来自重复数据ids
的数组的字段。_id
推荐阅读
- sql-server-2017 - 如何检查数组的任何值是否是 SQL Server 2017 中列值的子字符串?
- protocol-buffers - 导入 protos 时找不到文件错误
- python-3.x - 从两个熊猫数据框创建一个python字典
- dart - 必须在创建构造函数时初始化不可为空的实例字段“screenHeight”。这意味着什么?
- vue.js - 从项目外部导入 vuetify 组件时出现 nuxt 电子错误
- flutter - 在颤振中使用干净架构的音乐播放器
- java - 在 MacOS Big Sur 上导出到 $JAVA_HOME 时出现权限错误
- hibernate - 具有重叠复合 PRIMARY 和 FOREIGN KEY 的 HIBERNATE
- elasticsearch - 如何使用弹性搜索在查询中搜索术语
- javascript - 如何遍历电子表格中的所有列?