前言
作为软件测试工程师,我们常用的是查询操作以下是我工作中处理的一些问题,非基础教程分享,是工作经验分享。mongodb中查询用的也是比较多,用法也比较多,但此次查询不做深入的讲解,底下有截图查询的常用语法,后续会出一篇完整的讲解,需要资料的小伙伴也可以私信我。
1、mongodb集合插入数据:insertMany
与 insertOne
问题:统计列表由于每天只能生成一条数据,每页的数据是十条,为了上线前验证前端界面分页查询及展示。需要通过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.insert
Many
({...})
db
:表示 MongoDB 数据库实例。lucky_gift_statistics
:集合名称,表示要将数据插入到该集合中。insertMany
: 用于批量插入,性能高效,适合一次插入多条数据,但在批量插入失败时可能需要处理回滚问题。insertOne
: 只插入一条数据,适用于简单插入操作,适合不需要批量插入的场景。
2、mongodb集合删除数据:insertMany
与 insertOne
问题:需求测试过程中因为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
被用来匹配文档。deleteMany
与deleteOne
:deleteMany
会删除所有匹配条件的文档,而deleteOne
只会删除第一个匹配的文档。
3、修改mongodb集合数据:updateOne与 updateMany
问题:有些功能的推送只在特定的国家进行推送,我们需要测试符合条件和不符合条件的国家地区有无收到。此时配置是读取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 逻辑。因此,只有同时满足这三个条件的文档才会被选出。