MongoDB实验练习题

MongoDB中数组练习

一、运行以下代码,生成原始数据
import random
from pymongo import MongoClient

client = MongoClient().shuzu.example
name_list = ['衬衣', '裤子', '鞋子', '帽子']
size_list = ['S', 'M', 'L', 'XL']
price_list = [100, 200, 300, 600, 800]

for i in range(10):
    random_ = random.randint(2, 4)
    client.insert_one({
        'name': random.choice(name_list),
        'size': random.sample(size_list, random_),
        'price': random.sample(price_list, random_)
    })
二、练习要求:
TIP:利用 $1t,$gt,$ne,$gte等操作符
 	利用数组的索引特性,能够定位到数据的具体数据,比如price.0
   	可以直接在robo3t上完成

1、查询所有size不包含M的记录

> db.example.find({size:{$nin:["M"]}})
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea54"), "name" : "帽子", "size" : [ "L", "XL" ], "price" : [ 300, 600 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea57"), "name" : "鞋子", "size" : [ "XL", "L" ], "price" : [ 800, 300 ] }

2、查询price至少有一个元素在200~300之间

> db.example.find({$and:[{price:{$gte:NumberInt(200)}},{price:{$lte:NumberInt(300)}}]})
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea4e"), "name" : "衬衣", "size" : [ "S", "M", "XL", "L" ], "price" : [ 200, 100, 600, 300 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea4f"), "name" : "衬衣", "size" : [ "XL", "M", "S" ], "price" : [ 200, 800, 600 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea50"), "name" : "裤子", "size" : [ "M", "XL", "L", "S" ], "price" : [ 800, 100, 300, 200 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea51"), "name" : "鞋子", "size" : [ "M", "XL", "L", "S" ], "price" : [ 600, 300, 200, 100 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea52"), "name" : "帽子", "size" : [ "L", "M", "XL" ], "price" : [ 100, 300, 800 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea53"), "name" : "帽子", "size" : [ "S", "L", "XL", "M" ], "price" : [ 200, 300, 600, 100 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea54"), "name" : "帽子", "size" : [ "L", "XL" ], "price" : [ 300, 600 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea55"), "name" : "衬衣", "size" : [ "M", "XL", "S", "L" ], "price" : [ 300, 200, 600, 100 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea56"), "name" : "裤子", "size" : [ "M", "XL", "L" ], "price" : [ 300, 100, 800 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea57"), "name" : "鞋子", "size" : [ "XL", "L" ], "price" : [ 800, 300 ] }
> db.example.find({price:{$gte:200,$lte:300}})
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea4e"), "name" : "衬衣", "size" : [ "S", "M", "XL", "L" ], "price" : [ 200, 100, 600, 300 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea4f"), "name" : "衬衣", "size" : [ "XL", "M", "S" ], "price" : [ 200, 800, 600 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea50"), "name" : "裤子", "size" : [ "M", "XL", "L", "S" ], "price" : [ 800, 100, 300, 200 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea51"), "name" : "鞋子", "size" : [ "M", "XL", "L", "S" ], "price" : [ 600, 300, 200, 100 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea52"), "name" : "帽子", "size" : [ "L", "M", "XL" ], "price" : [ 100, 300, 800 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea53"), "name" : "帽子", "size" : [ "S", "L", "XL", "M" ], "price" : [ 200, 300, 600, 100 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea54"), "name" : "帽子", "size" : [ "L", "XL" ], "price" : [ 300, 600 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea55"), "name" : "衬衣", "size" : [ "M", "XL", "S", "L" ], "price" : [ 300, 200, 600, 100 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea56"), "name" : "裤子", "size" : [ "M", "XL", "L" ], "price" : [ 300, 100, 800 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea57"), "name" : "鞋子", "size" : [ "XL", "L" ], "price" : [ 800, 300 ] }

3、查询所有price字段长度为2的记录

> db.example.find({price:{$size:2}})
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea54"), "name" : "帽子", "size" : [ "L", "XL" ], "price" : [ 300, 600 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea57"), "name" : "鞋子", "size" : [ "XL", "L" ], "price" : [ 800, 300 ] }

4、所有size第1个数据为S的记录

> db.example.find({"size.0":"S"})
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea4e"), "name" : "衬衣", "size" : [ "S", "M", "XL", "L" ], "price" : [ 200, 100, 600, 300 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea53"), "name" : "帽子", "size" : [ "S", "L", "XL", "M" ], "price" : [ 200, 300, 600, 100 ] }

5、price第1个数据大于500的记录

> db.example.find({"price.0":{$gt:500}})
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea50"), "name" : "裤子", "size" : [ "M", "XL", "L", "S" ], "price" : [ 800, 100, 300, 200 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea51"), "name" : "鞋子", "size" : [ "M", "XL", "L", "S" ], "price" : [ 600, 300, 200, 100 ] }
{ "_id" : ObjectId("5fc1b4e597852f20e2cdea57"), "name" : "鞋子", "size" : [ "XL", "L" ], "price" : [ 800, 300 ] }

mongodb分组操作

一、根据以下代码生成数据
import random
from pymongo import MongoClient

client = MongoClient().fenzu.example
name_list = ['张三', '李四', '王五', '赵六']
date_list = ['2018/6/1', '2018/6/2', '2018/6/3', '2018/6/4']

for i in range(20):
    client.insert_one({
        'name': random.choice(name_list),
        'date': random.choice(date_list),
        'score': random.randint(50, 100)
    })
# 运行后的数据如下所示:
> db.example.find()
{ "_id" : ObjectId("5fc885939400eb511abb08c5"), "name" : "张三", "date" : "2018/6/2", "score" : 71 }
{ "_id" : ObjectId("5fc885939400eb511abb08c6"), "name" : "王五", "date" : "2018/6/4", "score" : 76 }
{ "_id" : ObjectId("5fc885939400eb511abb08c7"), "name" : "赵六", "date" : "2018/6/2", "score" : 54 }
{ "_id" : ObjectId("5fc885939400eb511abb08c8"), "name" : "李四", "date" : "2018/6/4", "score" : 97 }
{ "_id" : ObjectId("5fc885939400eb511abb08c9"), "name" : "李四", "date" : "2018/6/1", "score" : 79 }
{ "_id" : ObjectId("5fc885939400eb511abb08ca"), "name" : "张三", "date" : "2018/6/3", "score" : 82 }
{ "_id" : ObjectId("5fc885939400eb511abb08cb"), "name" : "李四", "date" : "2018/6/3", "score" : 88 }
{ "_id" : ObjectId("5fc885939400eb511abb08cc"), "name" : "张三", "date" : "2018/6/3", "score" : 100 }
{ "_id" : ObjectId("5fc885939400eb511abb08cd"), "name" : "李四", "date" : "2018/6/1", "score" : 89 }
{ "_id" : ObjectId("5fc885939400eb511abb08ce"), "name" : "李四", "date" : "2018/6/3", "score" : 98 }
{ "_id" : ObjectId("5fc885939400eb511abb08cf"), "name" : "赵六", "date" : "2018/6/2", "score" : 70 }
{ "_id" : ObjectId("5fc885939400eb511abb08d0"), "name" : "李四", "date" : "2018/6/2", "score" : 100 }
{ "_id" : ObjectId("5fc885939400eb511abb08d1"), "name" : "张三", "date" : "2018/6/2", "score" : 70 }
{ "_id" : ObjectId("5fc885939400eb511abb08d2"), "name" : "赵六", "date" : "2018/6/1", "score" : 76 }
{ "_id" : ObjectId("5fc885939400eb511abb08d3"), "name" : "张三", "date" : "2018/6/3", "score" : 56 }
{ "_id" : ObjectId("5fc885939400eb511abb08d4"), "name" : "张三", "date" : "2018/6/1", "score" : 75 }
{ "_id" : ObjectId("5fc885939400eb511abb08d5"), "name" : "李四", "date" : "2018/6/3", "score" : 63 }
{ "_id" : ObjectId("5fc885939400eb511abb08d6"), "name" : "李四", "date" : "2018/6/2", "score" : 71 }
{ "_id" : ObjectId("5fc885939400eb511abb08d7"), "name" : "王五", "date" : "2018/6/4", "score" : 83 }
{ "_id" : ObjectId("5fc885939400eb511abb08d8"), "name" : "赵六", "date" : "2018/6/3", "score" : 69 }
二、操作要求

1、统计每个人的记录数量

> db.example.aggregate([{$group:{_id:"$name",countnum:{$sum:1}}}])
{ "_id" : "李四", "countnum" : 8 }
{ "_id" : "赵六", "countnum" : 4 }
{ "_id" : "王五", "countnum" : 2 }
{ "_id" : "张三", "countnum" : 6 }

2、所有分数大于70,只返回name和score

> db.example.find({score:{$gt:70}},{name:1,score:1,_id:0})
{ "name" : "张三", "score" : 71 }
{ "name" : "王五", "score" : 76 }
{ "name" : "李四", "score" : 97 }
{ "name" : "李四", "score" : 79 }
{ "name" : "张三", "score" : 82 }
{ "name" : "李四", "score" : 88 }
{ "name" : "张三", "score" : 100 }
{ "name" : "李四", "score" : 89 }
{ "name" : "李四", "score" : 98 }
{ "name" : "李四", "score" : 100 }
{ "name" : "赵六", "score" : 76 }
{ "name" : "张三", "score" : 75 }
{ "name" : "李四", "score" : 71 }
{ "name" : "王五", "score" : 83 }

3、计算每个人得分的最大值、最小值、得分之和还有平均分

> db.example.aggregate([{$group:{_id:"$name",maxnum:{$max:"$score"},minnum:{$min:"$score"},sumnum:{$sum:"$score"},avgnum:{$avg:"$score"}}}])
{ "_id" : "李四", "maxnum" : 100, "minnum" : 63, "sumnum" : 685, "avgnum" : 85.625 }
{ "_id" : "赵六", "maxnum" : 76, "minnum" : 54, "sumnum" : 269, "avgnum" : 67.25 }
{ "_id" : "王五", "maxnum" : 83, "minnum" : 76, "sumnum" : 159, "avgnum" : 79.5 }
{ "_id" : "张三", "maxnum" : 100, "minnum" : 56, "sumnum" : 454, "avgnum" : 75.66666666666667 }
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_45775873

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

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

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

打赏作者

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

抵扣说明:

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

余额充值