MongoDB 基础语法【增删改查】

前言

作为软件测试工程师,我们常用的是查询操作以下是我工作中处理的一些问题,非基础教程分享,是工作经验分享。mongodb中查询用的也是比较多,用法也比较多,但此次查询不做深入的讲解,底下有截图查询的常用语法,后续会出一篇完整的讲解,需要资料的小伙伴也可以私信我。

1、mongodb集合插入数据:insertManyinsertOne

问题:统计列表由于每天只能生成一条数据,每页的数据是十条,为了上线前验证前端界面分页查询及展示。需要通过sql进行造数据。

db.lucky_gift_statistics.insertMany([
  {
    "date": "2024-02-15",
    "loseCoin": NumberLong("1260"),
    "theNumberOfPeople": NumberLong("3"),
    "theNumberOfVisitors": NumberLong("11"),
    "winCoin": NumberLong("1980"),
    "poolValueBalance": NumberLong("3325"),
    "winLoseCoin": NumberLong("720")
  },
  {
    "date": "2024-02-16",
    "loseCoin": NumberLong("1340"),
    "theNumberOfPeople": NumberLong("4"),
    "theNumberOfVisitors": NumberLong("12"),
    "winCoin": NumberLong("2020"),
    "poolValueBalance": NumberLong("3425"),
    "winLoseCoin": NumberLong("680")
  },
  {
    "date": "2024-02-17",
    "loseCoin": NumberLong("1500"),
    "theNumberOfPeople": NumberLong("5"),
    "theNumberOfVisitors": NumberLong("15"),
    "winCoin": NumberLong("2100"),
    "poolValueBalance": NumberLong("3500"),
    "winLoseCoin": NumberLong("600")
  },
  {
    "date": "2024-02-18",
    "loseCoin": NumberLong("1700"),
    "theNumberOfPeople": NumberLong("6"),
    "theNumberOfVisitors": NumberLong("16"),
    "winCoin": NumberLong("2200"),
    "poolValueBalance": NumberLong("3650"),
    "winLoseCoin": NumberLong("500")
  },
  {
    "date": "2024-02-19",
    "loseCoin": NumberLong("1800"),
    "theNumberOfPeople": NumberLong("7"),
    "theNumberOfVisitors": NumberLong("18"),
    "winCoin": NumberLong("2400"),
    "poolValueBalance": NumberLong("3800"),
    "winLoseCoin": NumberLong("600")
  }
]);

讲解 

该语句的作用是将 5 条记录批量插入到 MongoDB 的 lucky_gift_statistics 集合中。

db.lucky_gift_statistics.insertMany({...})

  • db:表示 MongoDB 数据库实例。
  • lucky_gift_statistics:集合名称,表示要将数据插入到该集合中。
  • insertMany: 用于批量插入,性能高效,适合一次插入多条数据,但在批量插入失败时可能需要处理回滚问题。
  • insertOne: 只插入一条数据,适用于简单插入操作,适合不需要批量插入的场景。

2、mongodb集合删除数据:insertManyinsertOne

问题:需求测试过程中因为bug等各种原因会产生一些脏数据,为了解决报错等信息我们需求手动进行删除对应的脏数据。先查询报错信息然后确定问题。

db.lucky_gift_statistics.deleteMany({
  _id: { 
    $in: [
      ObjectId("66f3d84d9b06489828bc8e43"),
	        ObjectId("66f3d84d9b06489828bc8e42")
    ]
  }
});

 该语句的作用是批量删除 lucky_gift_statistics 集合中指定id的数据。

  • db:表示 MongoDB 数据库实例。
  • lucky_gift_statistics:目标集合名称,表示从这个集合中删除文档。
  • deleteMany:这是 MongoDB 的一个方法,用来删除匹配条件的多个文档。如果没有匹配条件,所有文档都会被删除(除非指定特定条件)
  • _id:这是 MongoDB 文档的唯一标识符(主键)。
  • $in:这是一个查询操作符,用于指定多个可能的匹配值。在这里,$in 表示 _id 字段的值必须是数组中给出的其中之一。
  • ObjectId(...):这是 MongoDB 中的特殊类型,用来唯一标识一个文档。在这里,两个特定的 ObjectId 被用来匹配文档。
  • deleteManydeleteOnedeleteMany 会删除所有匹配条件的文档,而 deleteOne 只会删除第一个匹配的文档。

 3、修改mongodb集合数据:updateOneupdateMany

问题:有些功能的推送只在特定的国家进行推送,我们需要测试符合条件和不符合条件的国家地区有无收到。此时配置是读取redis火缓存的数据,redis则是从mongodb上读取对应的字段,所以我们需要修改mongodb的字段。

db.biz_config.updateOne({"key":"cps-register-reward-config"},
{$set:{"eliminateCountryCode":"IN,ID,JP"}})

讲解 

  • db.biz_config.updateOne():

    • biz_config 是要操作的集合。
    • updateOne 方法用于更新集合中第一个匹配查询条件的文档。
  • {"key": "cps-register-reward-config"}:

    • 这是查询条件,用于在 biz_config 集合中查找 key 等于 "cps-register-reward-config" 的文档。
  • {$set: {"eliminateCountryCode": "IN,ID,JP"}}:

    • $set 是一个更新操作符,用来更新文档中的特定字段。
    • 这里指定将 eliminateCountryCode 字段的值更新为 "IN,ID,JP"
    • updateOne:只会更新第一个符合条件的文档。如果有多个文档匹配该查询条件,只有第一个文档会被更新。
    • updateMany是用于更新所有符合查询条件的文档,而不仅仅是第一个匹配的文档。与 updateOne 相比,updateMany 会遍历所有符合条件的文档,并逐一进行更新
    • $set:确保只更新指定的字段(在这个例子中是 eliminateCountryCode),而不影响文档中的其他字段。
    • 字段不存在时:如果文档中没有 eliminateCountryCode 字段,MongoDB 会自动创建这个字段并设置它的值为 "IN,ID,JP"

 4、查询mongodb集合数据:find

 问题:有些数据前端界面不展示或者不方便查询出来,此时如果要排查问题可以查询查询数据库进行查看,测试历史渠道统计——新增字段3天充值率时界面没有充值人数的字段,此时界面没法判断是人数统计有误,没有统计还是运算有误等原因,数据库则有记录,此时便可以边操作边查询数据库。

db.channel_daily_statistics.find(
{"channelNo":"FacebookAds",createDate: ISODate("2023-07-20T00:00:00.000Z"),
childChannelNo:null}).sort({_id:-1})
    • "channelNo": "FacebookAds":查找 channelNo"FacebookAds" 的文档。
    • "createDate": ISODate("2023-07-20T00:00:00.000Z"):查找 createDate 字段值为 2023 年 7 月 20 日的文档。ISODate 是 MongoDB 中的日期格式。
    • "childChannelNo": null:查找 childChannelNo 字段值为 null 的文档,表明没有子渠道信息的记录。
  • .sort({_id: -1})
    使用 _id 字段按降序排序(-1 表示倒序),返回结果会按照 _id 从最新到最旧排列。

  • MongoDB 在处理这些条件时,默认使用 AND 逻辑。因此,只有同时满足这三个条件的文档才会被选出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值