前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongo常见查询用法分享(关联表查询+随机返回XX条记录)

mongo常见查询用法分享(关联表查询+随机返回XX条记录)

作者头像
小博测试成长之路
发布2024-03-25 17:20:21
770
发布2024-03-25 17:20:21
举报
文章被收录于专栏:软件测试学习软件测试学习

最近两天在测需求和写脚本的时候,遇到的两个场景,学会的mongodb的查询用法,分享给大家。

场景一:

针对一些股票的公司事件的数据,在主表和明细表都有存储相关记录,现在有需求要删除明细表某些满足条件的记录,同时如果针对同一个事件在明细表只有一条记录的话,要把对应的主表的记录也删掉。

测这个需求的时候,我就在想万一删了明细表,主表的数据没删除,或者主表的数据删了,明细表数据没删干净怎么办,可以写个sql简单的验证一下这种情况:

代码语言:javascript
复制
db.tableA.aggregate([
  {
    $match: {
      // 添加其他条件,例如age字段大于等于18
      age: { $gte: 18 },
      // 如果还有其他条件,可以继续在这里添加
    }
  },
  {
    $lookup: {
      from: "tableB",
      localField: "field1",
      foreignField: "field1",
      as: "matched_records"
    }
  },
  {
    $match: {
      matched_records: { $size: 0 } // 找出没有匹配到B表的记录
    }
  },
  {
    $project: {
      _id: 0, // 不显示默认的_id字段
      field1: 1 // 显示eventId字段
      // 在这里可以继续添加其他需要显示的字段
    }
  }
])
localField:表示当前集合(在这里是A表)中的字段,该字段的值将用于与另一个集合中的字段进行匹配。
foreignField:表示另一个集合(在这里是B表)中的字段,将与当前集合中的字段进行匹配。

以上脚本可以查询tableA表的field1字段在tableB表中不存在的记录

场景二:

最近在写pytest的接口自动化用例的时候,有一个场景需要对比数据库和缓存的数据是否一致,因为考虑到数据是变化的,因此不能写死某个id,也有考虑过按照更新时间排序取最新的XX条,后来决定还是采用按照某个条件查询出数据后,随机取多少条进行测试。

代码语言:javascript
复制
从查询的结果中随机返回几条数据

tb.aggregate([
  {"$match": {"status": 1}},  
  {"$sample": {"size": 50}}
  ]) # 随机返回50条status=1的数据

以上就是这两天学会的小技巧,你学会了吗~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小博测试成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档