mongodb 连接, 去重,索引

mongodb 去重,索引

MongoDB Community Server 下载: https://www.mongodb.com/try/download/community

GUI: The Ultimate Client, IDE and GUI for MongoDB | Studio 3T

连接

设置允许远程(局域网)连接 (windows)

在打开文件 "<你的安装目录>\MongoDB\Server\7.0\bin\mongod.cfg"

修改 bindIp0.0.0.0

# network interfaces
net:
  port: 27017
  # bindIp: 127.0.0.1
  bindIp: 0.0.0.0

重启服务!!!

若还是连不上检查防火墙端口

参考: https://blog.csdn.net/qq754772661/article/details/110876957

云数据库连接要使用 公网连接的uri地址 !!!我老是没看到搞半天, 还要添加IP白名单

常见问题:

创建索引优化查询

方法: db. 集合.createIndexes() - MongoDB手册

经常查询的字段创建索引可增加查询效率

如图, 未创建前, 在 450w 的数据中查询需要约20s

image-20241011205953213

创建索引

// 创建多个索引
db.getCollection("math").createIndexes([
    { "answer_id": 1 },
    { "question_id": 1 }
])
// 查看当前索引
db.getCollection("math").getIndexes(); 

如图效果是非常显著的, 只需要39ms

image-20241011210713801

去重统计总数

采集的数据经常可能会有重复的, 所以根据field_name去重统计总数

第一种简单, 但是数据量超过16MB会报错

db.collection.distinct("field_name").length

第二种, 使用聚合查询

db.collection.aggregate([
  {
    $group: {
      _id: "$field_name"  // 使用字段进行分组
    }
  },
  {
    $count: "totalCount"  // 统计分组后的文档数量
  }
])

去重后的数据导出到一个新集合中

db.collection.aggregate([
  {
    $group: {
      _id: "$answer_id",     // 根据 answer_id 进行分组
      doc: { $first: "$$ROOT" }  // 保留每个分组的第一条记录
    }
  },
  {
    $replaceRoot: { newRoot: "$doc" }  // 将结果恢复为原始文档结构
  },
  {
    $out: "unique_answers"  // 将结果输出到新集合 unique_answers
  }
])

oot: { newRoot: “$doc” } // 将结果恢复为原始文档结构
},
{
$out: “unique_answers” // 将结果输出到新集合 unique_answers
}
])


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦中千秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值